2017-12-13 3 views
2

で直接使用してください。私はstring[]を持っていて、後で辞書に入れるために、それ自体とケイツ人の結合の製品を得たいと思っています。ただし、クローン/重複キーがある場合は、以外のすべての組み合わせを以外にしたいと思います。文字列[]のデカルト/クローンを持たないデカルト生成物は、C#

string[] array1 = { "aa", "bb", "cc" }; 
string[][] arrayOfArrays = array1.SelectMany(left => array1, (left, right) => new string[] { left, right }).ToArray(); 

は、各要素として生じるすべての可能な組み合わせからstring[][]を取得します:私はここで理解しようとしている何

aa aa 
aa bb 
aa cc 
bb aa 
bb bb 
bb cc 
cc aa 
cc bb 
cc cc 

あなたはこのような結果を持っているときに呼び出さ参加しているものです。

aa bb 
aa cc 
bb aa 
bb cc 
cc aa 
cc bb 

私の辞書を作成すると、forループを使用して値のペアにそれらのキーを取り出す必要はありません。 1ライナーまたはラムダでこれをデモンストレーションしているなら、この種の構文についてもっと理解しようとしているので、それを見たいと思っています。

答えて

5

名前がわからないのですが、Where句を使用して一致する値を除外することができます。

string[][] arrayOfArrays = 
    array1.SelectMany(left => array1, (left, right) => new string[] { left, right }) 
      .Where(x => x[0] != x[1]) 
      .ToArray(); 
+0

これはまさに私が探しているものです。名前は今何であるのだろうと思っていますが。私は別の言語でこの操作をもう一度見なければならない場合があります。 – Jamin

+0

名前があるかもしれませんし、そうでないかもしれません。デカルト積は簡単に定義できますが、いくつかの値が取り除かれたデカルト積に与えられた名前は聞いたことがありません(この場合、両辺の値が一致したとき)。 –

+0

ありがとうございました。本当に大変便利です。 – Jamin

関連する問題