2016-08-04 6 views
2

私はオブジェクトのリストを持っています。オブジェクトには名前があります。どのようにして同じ名前のリスト内の2つのオブジェクトを見つけることができますか? これで、foreachループ内のすべてのオブジェクト名を文字列のリストに書き込み、それをチェックします。 は、このリストをチェックするために文字列のリストに書き込まずにオブジェクトの同じ名前をチェックする方法はありますか? はので、私のコードは次のようになります。オブジェクトのリスト。同じ名前の2つのオブジェクトを見つける

List<string> objectnames = new List<string>(); 

foreach (object obj in DBobjects) 
{ 
    objectnames.Add(obj.name); 
} 

var doublicates = objectnames.GroupBy(x => x).Where(x => x.Count() > 1).Select(x => x.Key); 

if(doublicates.Any()) 
{ 
    foreach(string name in doublicates) 
    { 
     //do something with each dublicate 
    } 
} 
+5

'DBobjects.GroupBy(OBJ => obj.name)'? – zerkms

+3

私は単語 "二倍体"が大好きです、私はそれが本当の言葉だったら嬉しいです! – DavidG

答えて

1
あなたは直接あなたの元のリストにそれを使用することができ

var doublicates = DBobjects.GroupBy(x => x.name) 
          .Where(x => x.Count() > 1) 
          .Select(x => new { Name = x.Key, objs = x.ToList() }); 

foreach(var duplicate in doublicates) 
{ 
    // do something with duplicate.Name and duplicate.objs 
} 
+0

はうまく動作します - ありがとう – OHA

6

なぜないあなただけのグループあなたDBobjects

var allDuplicates = DBobjects.GroupBy(o => o.name).Where(g => g.Count() > 1); 

の場合nameからその名前のオブジェクトのリストへの辞書マッピングに変換することができます:

var dict = allDuplicates.ToDictionary(g => g.Key, g => g.ToList()); 

今、たとえば、あなたがすべての重複を一覧表示することができます:

foreach(string name in dict.Keys) 
{ 
    Console.WriteLine($"There are {dict[name].Count} entries with name {name}:"); 
    foreach(var o in dict[name]) 
     Console.Write(" " + o.ToString()); 
} 
関連する問題