2016-07-28 2 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] 

당신이 그것을 가능하다고 생각하십니까 내 행렬의 결과인가?

들으 많은

+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/itter를 반복하지 않고 모든 셀을 처리하는 방법은 없습니다. – 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()와 같은 줄을 하나 갖고 싶습니다. – stix

+0

루프를 감추고 있지 않은 것처럼 말하면됩니다. –

+0

어떻게하는지 알고 있습니까? 왜냐하면 내가하지 않기 때문이다. 그리고 나는 그것들을 숨기는 것과 같다는 것을 안다. – stix

관련 문제