我有一个列表List<Double[,]>
。让我们将列表中的每个二维数组称为一层。所以我应该比较每一层中的每个元素并提取最大值。并构造最大值的层。
我该怎么做?也许使用LINQ?或者foreach循环构造?
帮助!
谢谢!
答案 0 :(得分:6)
var x = new double[,] { { 1, 2 }, { 3, 4 } };
var y = new double[,] { { 5, 6 }, { 7, 8 } };
var list = new List<double[,]> { x, y };
var maxValues = list
.Select(arg => arg.Cast<double>().Max())
.ToList();
据我所知,x和y是水平。
结果将是4和8,它们分别在x和y级上最大。
<强> [编辑] 强>
似乎我误解了这个问题。 要查找最大级别,您可以使用以下代码:
var maxLevel = list
.Select(arg => new { Max = arg.Cast<double>().Max(), Level = arg })
.OrderByDescending(arg => arg.Max)
.Select(arg => arg.Level)
.First();
答案 1 :(得分:2)
假设您的所有图层都具有相同的尺寸sizeX
x sizeY
,否则这没有任何意义:
var maxLayer = new Double[sizeX,sizeY];
for( int x = 0; x <= maxLayer.GetUpperBound(0); x++ )
for( int y = 0; y <= maxLayer.GetUpperBound(1); y++ )
maxLayer[x,y] = Double.NegativeInfinity;
foreach( Double[,] layer in list )
for( int x = 0; x <= maxLayer.GetUpperBound(0); x++ )
for( int y = 0; y <= maxLayer.GetUpperBound(1); y++ )
maxLayer[x,y] = Math.Max( maxLayer[x,y], layer[x,y] );
这里没什么聪明的。