2016-10-14 2 views
-4

LINQを使用して配列から要素の順序付けされたペアを取得する方法はありますか?例えば、 は私は:Descarte配列の配列

int[] d = { 1, 2, 3 }; 

私が必要:

{{1,1}、{1,2}、...、{3,3}}

{{1,1}、{2,2}、{3,3}、{1,1}、{2,2}、{Iは、LINQクエリを試みたが、それは

を返します3,3}、{1,1}、{2,2}、{3, 3}}

var pairs = d.SelectMany(a => d.Select(b => new[] { a, b })); 

、私の誤りを見つけるために私を助けてください。このよう

+6

あなたが提供したコードは、あなたがしたいと主張するシーケンスではなく、あなたはそれがないと言っているシーケンスを生成します。 – Servy

+1

https://en.wikipedia.org/wiki/Cartesian_product(http://stackoverflow.com/questions/3093622/generating-all-possible-combinationsを含む多くの質問に既に記載されています)をお探しですか?投稿の@Servyコードはあなたが望む結果を生み出すようです... –

答えて

1

var result = d.SelectMany(a => d, Tuple.Create) 
       .Where(c=> c.Item1 <= c.Item2).ToArray(); 
+1

それは綺麗です –

+0

@MatiasCiceroしかし、OPは、最初の項目が2番目よりも少ないペアを望んでいると述べていないので、間違った出力が生成されます。 – Servy

+0

@Servy OPのコードが彼の望むように機能するなら、彼はなぜ質問するべきですか?彼の投稿に基づいて、私は彼が最初の項目が2番目またはそれ以下の組み合わせを探していると思うと思う。 –

-1

このコードの動作

 int[] d = { 1, 2, 3 }; 

     var query = (from elem1 in d 
        from elem2 in d 
        where elem1>= elem2 
        select elem1< elem2? new List<int>() { elem1, elem2 }: new List<int>() { elem2, elem1 } 
        ).Distinct().ToArray(); 
+0

このコードが動作し、テストしましたが、{{1,1}、{1,2}、...、{3,3}}が結果になりました – Esperento57