2016-07-28 14 views
0

ループを記述することなく行列を作成できるかどうかを知りたいと思います。私は範囲の簡単なリストから始めようとしますが、私はさらに進む方法を知らない。ここでループなしで行列を作成する方法

Enumerable.Range(1, 4).ToList() 

3つのループを有するコード:

private static int[][] calculPossibleCombinaison(){ 
    int l; 
    for (int i = 1; i < 5; i++) { 
     for (int j = 1; j < 5; j++) { 
      for (int k = 1; k < 5; k++) { 
       l = (i*j*k)-1; 
       combinaison[l][0] = i; 
       combinaison[l][1] = j; 
       combinaison[l][2] = k; 
       console.writeline("["+combinaison[l][0]+","+combinaison[l][1]+","+combinaison[l][2]+"]"); 
      } 
     } 
    } 
    return combinaison; 
} 

これは私の行列

[1,1,1] 
[1,1,2] 
[1,1,3] 
[1,2,1] 
[1,2,2] 
[1,2,3] 
[1,3,1] 
[1,3,2] 
[1,3,3] 
[2,1,1] 
[2,1,2] 
[2,1,3] 
[2,2,1] 
[2,2,2] 
[2,2,3] 
[2,3,1] 
[2,3,2] 
[2,3,3] 
[3,1,1] 
[3,1,2] 
[3,1,3] 
[3,2,1] 
[3,2,2] 
[3,2,3] 
[3,3,1] 
[3,3,2] 
[3,3,3] 

の結果であり、あなたはそれが可能だと思いますか?

Thxをたくさん

+0

はいを​​試してみてください。非常にそう – BugFinder

+0

あなたはそれのためのlinqまたはラムダ式を使用する必要がありますこれらのリンクを確認してください:http://stackoverflow.com/questions/3183626/convert-nested-for-loops-into-single-linq-statement; http://codereview.stackexchange.com/questions/105336/convert-foreach-loop-into-linq-in-c –

+0

回避ループのポイントは何ですか? Linqであっても、内部でそれらを使用します。 list/matrix/whiterを反復することなく、すべてのセルを通過する方法はありません。 – HimBromBeere

答えて

1

この

Enumerable.Range(1, 3) 
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x, y})  
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x[0], x[1], y}).ToArray(); 
+0

Gosh、thxの答えを見てください。それは完全に動作します:) – stix

0

あなたは、LINQを使用することの代わりに、ループのために、まだあなたは、ループを取り除くことができます。 Linqを使っているのはクールですが、内部にループインプランテーションがあります。あたかもそれらのループのためのものを関数の中に入れて、それを呼び出すかのように。 ループなしでは実行できません。

Enumerable.Range(1, 4).ToList().ForEach(i=>{ 
     Enumerable.Range(1, 4).ToList().ForEach(j=>{ 
      Enumerable.Range(1, 4).ToList().ForEach(k=>{ 
        l = (i*j*k)-1; 
       combinaison[l][0] = i; 
       combinaison[l][1] = j; 
       combinaison[l][2] = k; 
      }); 
     }); 
}); 

再帰:

int i=0,j=0,k=0; 

    public void MakeMartix(){ 

     if(i>3){i=0;j++;} 
     if(j>3){j=0;k++;} 
     if(k>4)return; 
     l = (i*j*k)-1; 
     combinaison[l][0] = i; 
     combinaison[l][1] = j; 
     combinaison[l][2] = k; 
       i++; 
       MakeMatirx(); 
    } 
+0

それはリンクか何か他の方法で行うことができますか? Enumerable.Range(1、4).ToList()のような行を1つ持っていたいと思います。 – stix

+0

ループを隠すように言っていますが、使用していません。 –

+0

これを行う方法は分かりますか?なぜなら私は〜しない。そして、それは彼らを隠すようなものだと分かっています。 – stix

関連する問題