说,我有一个名为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”条目。
答案 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);
}
}