2016-11-17 155 views
2

我有一個標準的2D鋸齒陣列int[][] arrc# - 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

讓我相信我明白你的代碼段(應該有一個LINQ碩士學位,有時可以是非常模糊的!) 'SelectMany'劃分鋸齒狀列'subArr'中的數組及其索引。對於每個'subArr',它'選擇'pair'值,j',其中j是當前數組中的索引,然後我們按值排序。爲什麼不使用'Min'而不是'OrderBy'?它會打破所有? – 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