C# - 使用LINQ查找2D不规则数组的最小值,并返回索引

3

我有一个标准的二维不规则数组 int[][] arr

让我们称行和列的索引为ij

我想通过LINQ检索指向矩阵最小值的索引ij

我试图实现的目标是:

from num in arr
where min = (from num in arr select min(num))
select i, j
2个回答

4
您也可以这样做:
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

3
你可以使用包括索引的 SelectManySelect 的重载,然后使用 OrderByFirst 来获取具有最小值的一个索引集合。
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;

让我确认一下我是否理解了你的片段(有时候LINQ可能非常晦涩难懂!)SelectMany将锯齿数组分成列subArr和它们的索引。对于每个subArr,它会选择对value, j进行排序,其中j是当前数组中的索引。那么为什么不使用Min而是使用OrderBy呢?这会破坏所有吗? - Fylax
1
@Fylax Min(x => x.value) 只会返回最小的 value 值,而不是包含索引的匿名类。 - juharr
那很有道理! - Fylax
@Fylax 你也可以查看 MoreLinq 库,其中包含一个 MinBy 扩展方法,可以代替 OrderByFirst 在这里使用。 - juharr
非常感谢,我会看一下。实际上这并不是我的完整问题,而是一个简化版本,让我了解是否可以通过LINQ解决,或者我需要使用旧式嵌套循环。 - Fylax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接