获取Person对象列表中使用的名称列表

时间:2012-02-08 19:37:35

标签: c# list

说,我有一个名为people的人物对象列表:

public class Person
{
    public int age;
    public string name;

    public Person(int age, string name)
    {
        this.age = age;
        this.name = name;
    }
}

List<Person> people = new List<Person>();

该列表中填充了大量人员数据。如何获取列表中使用的所有名称的列表,但每个名称只出现一次?例如,如果在人员列表中有1000个名字为'Bob'且200000名且名字为'Alice',则我的列表应仅包含一个“Bob”条目和一个“Alice”条目。

2 个答案:

答案 0 :(得分:6)

var names = people.Select(p => p.name).Distinct();

答案 1 :(得分:5)

如果你能够使用LINQ,它就像:

一样简单
var distinctNames = people.Select(p => p.name).Distinct();

如果没有,那就有点复杂了:

var distinctNames = new List<string>();

foreach(var person in people)
    if(!distinctNames.Contains(person.Name)) distinctNames.Add(person.Name);

或者,如果您正在处理大型数据集并需要更高效的东西(以空间为代价):

var distinctNames = new Dictionary<string, string>();

foreach(var person in people)
{
    if(!distinctNames.ContainsKey(person.Name))
    {
        distinctNames.Add(person.Name, person.Name);
    }
}