How to get just unique values from a List<object>

  • Thread starter Thread starter Paul
  • Start date Start date
P

Paul

Hi I have a list of type object. The object has an ID as one of the elements
and I would like to create another list that just has objects with unique IDs.
For example
in the list if I have
listofobject[0].ID = 1
listofobject[1].ID =1
listofobject[2].ID = 2
I would like new list with only
listofobject[0].ID =1
listofobject[1].ID = 2
Thanks.
 
Paul said:
Hi I have a list of type object. The object has an ID as one of the elements
and I would like to create another list that just has objects with unique IDs.
For example
in the list if I have
listofobject[0].ID = 1
listofobject[1].ID =1
listofobject[2].ID = 2
I would like new list with only
listofobject[0].ID =1
listofobject[1].ID = 2
Thanks.
If you are using VS 2008 then you can do a linq query.

LS
 
Hi thanks for the response. Still using vs2005, ended up just going through
the list and if in second list do nothing, else add to second list. The
second list is the one that ends up with just the unique values.
--
Paul G
Software engineer.


Lloyd Sheen said:
Paul said:
Hi I have a list of type object. The object has an ID as one of the elements
and I would like to create another list that just has objects with unique IDs.
For example
in the list if I have
listofobject[0].ID = 1
listofobject[1].ID =1
listofobject[2].ID = 2
I would like new list with only
listofobject[0].ID =1
listofobject[1].ID = 2
Thanks.
If you are using VS 2008 then you can do a linq query.

LS
 
Paul said:
Hi thanks for the response. Still using vs2005, ended up just going through
the list and if in second list do nothing, else add to second list. The
second list is the one that ends up with just the unique values.

That doesn't scale very well, as checking if the list contains a value
gets considerably slower as the list grows. You should use a dictionary
for checking if the values exist or not:

Dictionary<int, int> unique = new Dictionary<int, int>();
foreach (int value in listofobjects) {
if (unique.ContainsKey(value)) {
// counts occurances - you can skip this if you don't want it:
unique[value]++;
} else {
unique.Add(value, 1);
}
}
 
thanks for the response. I do have some code working but will give it a try.
I converted the application from a windows to a console app as I need to
schedule it to run through sql server agent. Anyhow I am getting the error
on two methods now with the console app, worked fine in the windows app. The
error is (an object reference is required for the non static field, method or
property). This occures on the line were I call a method that I am passing 4
string lists into, so looks like
method2(emails, reports, names, days).
any ideas.
--
Paul G
Software engineer.


Göran Andersson said:
Paul said:
Hi thanks for the response. Still using vs2005, ended up just going through
the list and if in second list do nothing, else add to second list. The
second list is the one that ends up with just the unique values.

That doesn't scale very well, as checking if the list contains a value
gets considerably slower as the list grows. You should use a dictionary
for checking if the values exist or not:

Dictionary<int, int> unique = new Dictionary<int, int>();
foreach (int value in listofobjects) {
if (unique.ContainsKey(value)) {
// counts occurances - you can skip this if you don't want it:
unique[value]++;
} else {
unique.Add(value, 1);
}
}
 
Got it working!
--
Paul G
Software engineer.


Paul said:
thanks for the response. I do have some code working but will give it a try.
I converted the application from a windows to a console app as I need to
schedule it to run through sql server agent. Anyhow I am getting the error
on two methods now with the console app, worked fine in the windows app. The
error is (an object reference is required for the non static field, method or
property). This occures on the line were I call a method that I am passing 4
string lists into, so looks like
method2(emails, reports, names, days).
any ideas.
--
Paul G
Software engineer.


Göran Andersson said:
Paul said:
Hi thanks for the response. Still using vs2005, ended up just going through
the list and if in second list do nothing, else add to second list. The
second list is the one that ends up with just the unique values.

That doesn't scale very well, as checking if the list contains a value
gets considerably slower as the list grows. You should use a dictionary
for checking if the values exist or not:

Dictionary<int, int> unique = new Dictionary<int, int>();
foreach (int value in listofobjects) {
if (unique.ContainsKey(value)) {
// counts occurances - you can skip this if you don't want it:
unique[value]++;
} else {
unique.Add(value, 1);
}
}
 
Back
Top