2012-02-08 85 views
0

說,我有一個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>(); 

該列表中填充了大量的人的數據。如何獲得列表中使用的所有名稱的列表,但每個名稱只能出現一次?例如,如果在人物列表中有1000個名字爲「Bob」的人,而名字爲「Alice」的名字爲200000,則我的列表中只應包含一個「Bob」的條目和一個「Alice」的條目。

+0

如果這個人員列表從數據庫填充,請考慮使用數據庫爲您提供不同名稱的列表,如果這是您的應用程序中所需的全部名稱。 – Bernard 2012-02-08 19:41:52

回答

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); 
    } 
} 
+1

如果你不能使用LINQ,你也不能使用'HashSet '。 – SLaks 2012-02-08 19:42:53

+0

@SLaks:不正確。 http://stackoverflow.com/a/687042/45914 – jason 2012-02-08 19:43:27

+0

@Slaks - 使用'List '來代替更多的步行路線。 – 2012-02-08 19:47:54

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