c#-LINQ查找2D交错数组最小值,返回索引
我有一个标准的2D锯齿阵列c#-LINQ查找2D交错数组最小值,返回索引,c#,linq,C#,Linq,我有一个标准的2D锯齿阵列int[][]arr 让我们调用i和j行和列的索引 我想通过LINQ检索指向矩阵最小值的索引I和j 我想要实现的一个想法是bri from num in arr where min = (from num in arr select min(num)) select i, j 您可以使用包含索引的SelectMany和Select重载,然后使用OrderBy和First来获取具有最小值的一组索引 var min = arr.SelectMany((subArr, i)
int[][]arr
让我们调用i
和j
行和列的索引
我想通过LINQ检索指向矩阵最小值的索引I
和j
我想要实现的一个想法是bri
from num in arr
where min = (from num in arr select min(num))
select i, j
您可以使用包含索引的
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;
您也可以这样做:
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
让我确定我理解了您的代码片段(应该有LINQ硕士学位,有时可能非常模糊!)
SelectMany
将锯齿状数组划分为列subar
及其索引。对于每个subar
it选择s对值,j
,其中j是当前数组中的索引,然后我们按值排序。为什么不使用Min
而不是OrderBy
?这会破坏一切?@FylaxMin(x=>x.value)
只会返回最小的值,而不会返回包含索引的匿名类。这很有意义@Fylax您还可以查看包含MinBy
扩展方法的库,该扩展方法将在这里工作,而不是OrderBy
和首先
。非常感谢,我将查看它。实际上,这不是我的全部问题,而是一个简化版本,让我了解think是否可以通过LINQ工作,或者我是否需要老式的嵌套循环