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

C# 获取在Person对象列表中使用的名称列表,c#,list,C#,List,比如说,我有一个名为people的Person对象列表: 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>

比如说,我有一个名为people的Person对象列表:

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>();
公共类人物
{
公共信息;
公共字符串名称;
公众人物(整数年龄,字符串名称)
{
这个。年龄=年龄;
this.name=名称;
}
}
列表人员=新列表();

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

如果您能够使用LINQ,那么很容易做到:

var names = people.Select(p => p.name).Distinct();
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 List();
foreach(人与人之间的变量)
如果(!distinctNames.Contains(person.Name))distinctNames.Add(person.Name);
或者,如果您正在处理大型数据集,并且需要更高效的数据集(以空间为代价):

var distinctNames=new Dictionary();
foreach(人与人之间的变量)
{
如果(!distinctNames.ContainsKey(person.Name))
{
distinctNames.Add(person.Name,person.Name);
}
}

如果这个列表是从数据库中填充的,考虑使用数据库给你一个不同名字的列表,如果你在应用程序中只需要这些名字。如果你不能使用LINQ,你也不能使用<代码> HasSET 。@ Salks-使用了更多的人行道使用了<代码>列表>代码>。@杰森:真的。(lathough注LINQBridge)那是O(n^2)。您可以使用字典或窃取Mono的哈希集将其还原为O(n)。
var distinctNames = new Dictionary<string, string>();

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