寻找最大问题

时间:2011-06-07 01:57:47

标签: c# linq multidimensional-array foreach max

我有一个列表List<Double[,]>。让我们将列表中的每个二维数组称为一层。所以我应该比较每一层中的每个元素并提取最大值。并构造最大值的层。

我该怎么做?也许使用LINQ?或者foreach循环构造?

帮助!

谢谢!

2 个答案:

答案 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] );

这里没什么聪明的。