2012-02-08 6 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>(); 

リストは人々の大量のデータが取り込まれます。リスト内で使用されているすべての名前のリストを取得するにはどうすればよいのですか?たとえば、人物リストにfirstname 'Bob'という名前の1000人と 'alice'という名前の200000人が存在する場合、私のリストには 'Bob'のエントリと 'Alice'のエントリがそれぞれ1つだけ含まれている必要があります。

+0

この人のリストがデータベースから作成されている場合は、データベースを使用して、アプリケーションで必要な場合は別名のリストを提供することを検討してください。 – Bernard

答えて

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

+0

@SLaks:そうではありません。 http://stackoverflow.com/a/687042/45914 – jason

+0

@Slaks - 代わりに 'List 'を使って歩行者のルートを通過しました。 –

6
var names = people.Select(p => p.name).Distinct(); 
関連する問題