我有一个标准的二维不规则数组 int[][] arr
。
让我们称行和列的索引为i
和j
。
我想通过LINQ检索指向矩阵最小值的索引i
和j
。
我试图实现的目标是:
from num in arr
where min = (from num in arr select min(num))
select i, j
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
SelectMany
和 Select
的重载,然后使用 OrderBy
和 First
来获取具有最小值的一个索引集合。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;
SelectMany
将锯齿数组分成列subArr
和它们的索引。对于每个subArr
,它会选择对value, j
进行排序,其中j是当前数组中的索引。那么为什么不使用Min
而是使用OrderBy
呢?这会破坏所有吗? - FylaxMin(x => x.value)
只会返回最小的value
值,而不是包含索引的匿名类。 - juharrMinBy
扩展方法,可以代替OrderBy
和First
在这里使用。 - juharr