2017-01-24 7 views
0

これは重複した質問ですが、重複する値のペアのキー値を取得する際に同様の質問が表示されても、使用方法を理解するのに十分なほど深いことはありません。リストから重複する値の場所を取得する

私は現在、テキストを含むリストとリストを使用しています.Intersectを使用してリストを比較しています。どのように私は2つのリストは、それらの中に重複を持っているキー値を取得するつもりですか?ここに私のコードは次のとおりです。私は普通の辞書のためにこれを行うために参照

private string findDuplicates(Dictionary<int, List<string>> lists) 
{ 
    List<string> intersection = new List<string>(); 
    int i; 
    int j; 
    for (i = 0; i < 13; i++) 
    { 
     for (j = i + 1; j < 13; j++) 
     { 
      intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString()); 

     }; 
     //Attempt to retrieve value 
     if (intersection.Count > 0) 
     { 
      numberOfDomainsTB.Text += "\nLocations:\nList " + i + " and List " + j; 
     } 
    }; 

他の方法は次のとおりです。

lists.GroupBy(x => x.Value).Where(x => x.Count() > 1); 

しかし、それはリストの内部値を比較しません。

ありがとうございました。

+0

Googleがあります。 – roottraveller

+0

ディクショナリを 'リスト表示する 'のはなぜですか?配列やList <>のように使用しています。 –

+0

あなたの '//試行しようとしている'は外側forループ内にありますか? –

答えて

1
private string findDuplicates(Dictionary<int, List<string>> lists) 
{ 
    List<string> intersection = new List<string>(); 
    int i; 
    int j; 
    string compare = ""; 
    for (i = 0; i < lists.Count - 1; i++) 
    { 
     for (j = i + 1; j < lists.Count - 1; j++) 
     { 
      compare = String.Join(" ", lists[i].Intersect(lists[j])).ToString(); 
      if (!String.IsNullOrEmpty(compare)) 
      { 
       intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString()); 

      } 
     }; 

    }; 
} 

これは、intersection.Addが空であるかどうかにかかわらず常に新しい値をリストに追加することで解決しました。したがって、比較した場合、常にすべてのリストとの一致が示されます。だから、私は2回Intersectをやりました.1回は文字列に格納し、空白/空であればチェックし、そうでない場合は交差点で再度チェックします。実際に交差する値を追加するには、行を追加します。

注:最後に辞書を使用する必要はありませんでした。これは、単にこの作業を実行する前の試みの残り物です。通常のリストがあれば動作します。

関連する問題