2016-11-17 4 views
2

표준 2D 지그재그 배열 int[][] arr이 있습니다.C# - LINQ 2D 지그재그 형 배열 최소값 찾기, 색인 반환

ij을 행 및 열의 색인으로 호출 해 보겠습니다.

LINQ를 통해 색인의 최소값을 가리키는 인덱스 ij을 검색하고 싶습니다.

내가 달성하기 위해 노력하고있는 무슨의 생각은 BRI입니다

from num in arr 
where min = (from num in arr select min(num)) 
select i, j 

답변

2

당신은 사용할 수있는 인덱스의 세트와 중 하나를 얻을 수있는 인덱스 다음 OrderByFirst을 포함 SelectManySelect의 오버로드 최소치.

var min = arr.SelectMany((subArr, i) => subArr.Select((value, j) => new { i, j, value })) 
    .OrderBy(x => x.value) 
    .First(); 
int firstIndex = min.i; 
int secondIndex = min.j; 
+0

날 나는 당신의 조각을 이해 확인하자 는'SelectMany'는 들쭉날쭉 분할 (! 때로는 매우 모호 할 수있다하는 LINQ의 석사 학위가 있어야한다) 'subArr' 열과 그 색인에 배열. 각'subArr'에 대해'Select'는'value, j' 쌍을 의미합니다. 여기서 j는 현재 배열의 인덱스이고, 그 다음에 값으로 정렬됩니다. 'OrderBy' 대신'Min'을 사용하지 않는 이유는 무엇입니까? 그걸 다 망칠거야? – Fylax

+1

@Fylax'Min (x => x.value)'는 인덱스를 포함하는 익명 클래스가 아닌 최소'value' 만 반환합니다. – juharr

+0

그건 의미가 있습니다! – Fylax

1

또한이 작업을 수행 할 수 있습니다

var result = from i in Enumerable.Range(0, arr.Length) 
      from j in Enumerable.Range(0, arr[i].Length) 
      orderby arr[i][j] 
      select new { i, j }; 
var r = result.FirstOrDefault();// here is the indexes of min value