我有一个像这样的二维数组列表:
static void Main(string[] args) {
List<int[,]> kidsL = new List<int[,]>();
int[,] square1 = new int[8, 8];
int[,] square2 = new int[8, 8];
int[,] square3 = new int[8, 8];
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++) {
square1[i, j] = 1;
square2[i, j] = 2;
square3[i, j] = 3;
}
kidsL.Add(square1);
kidsL.Add(square2);
kidsL.Add(square3);
Console.WriteLine();
Console.Read();
}
我想确定每个数组的总和并找到最大值/最小值(在本例中最大值是 192)。
有没有一种简单的方法可以做到这一点,还是我必须循环使用老式的方法?
最佳答案
那么,你可以使用下面的代码来获取 IEnumarable<int>
来自int[,]
var enumarable = from int item in square2
select item;
此外,您还可以使用Cast<int>()
方法以解开 int[,]
至IEnumarable<int>
.
然后你可以使用Max()
和Min()
linq 方法。
var min = kidsL.Min(x => (from int item in x select item).Sum());
var max = kidsL.Max(x => (from int item in x select item).Sum());
// or
var min = kidsL.Min(x => x.Cast<int>().Sum())
或
var Max = (from int[,] array in kidsL
select (from int item in array select item).Sum())
.Max();
更新
from int[,] array in kidsL select (from int item in array select item).Sum()
查询返回 IEnumarable<int>
其中包含总和。为了获得 max 的索引,您应该使用 ToList
将 IEnumarable 转换为数组或列表或ToArray()
.
var sumList = (from int[,] array in kidsL
select(from int item in array select item).Sum())
.ToList();
var maxSum = sumList.Max();
var maxInd = sumList.IndexOf(maxSum);
sumList
是一个整数列表并包含总和。那么你可以使用Max
获得最大和和 IndexOf
的方法获取最大值的索引。
关于c# - 如何在 C# 中获取二维数组列表的最大值/最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998706/