C# 寻找最大问题

C# 寻找最大问题,c#,linq,multidimensional-array,foreach,max,C#,Linq,Multidimensional Array,Foreach,Max,我有这样一份清单。让我们将列表中的每个二维数组称为层。所以我应该比较每一层中的每个元素,提取最大值,并构建最大值的层 我该怎么做?也许使用LINQ?还是foreach循环构造 救命啊 谢谢 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 =

我有这样一份清单。让我们将列表中的每个二维数组称为层。所以我应该比较每一层中的每个元素,提取最大值,并构建最大值的层

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

救命啊

谢谢

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上分别为最大值

[编辑]

好像我误解了这个问题。 要查找max的级别,可以使用以下代码:

var maxLevel = list
    .Select(arg => new { Max = arg.Cast<double>().Max(), Level = arg })
    .OrderByDescending(arg => arg.Max)
    .Select(arg => arg.Level)
    .First();
据我所知,x和y是能级。 结果将是4和8,它们在级别x和y上分别为最大值

[编辑]

好像我误解了这个问题。 要查找max的级别,可以使用以下代码:

var maxLevel = list
    .Select(arg => new { Max = arg.Cast<double>().Max(), Level = arg })
    .OrderByDescending(arg => arg.Max)
    .Select(arg => arg.Level)
    .First();

假设所有层的大小都相同,否则这没有意义:

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

这里没有什么聪明的地方。

假设您的所有层都是相同大小的SizeXsizey,否则这就没有意义了:

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

这里没什么高明之处。

你能再进一步澄清一下吗?您希望如何比较每个层中的元素?是否要在每层中最大化它们?结果如何映射到图层?这不是一个列表吗?如果用double[][]而不是double[,]可能是值得的,因为这样你就可以使用所有只适用于1D数组的语句。你能进一步澄清一下吗?您希望如何比较每个层中的元素?是否要在每层中最大化它们?结果如何映射到图层?这不是一个列表吗?如果用double[][]而不是double[,]是值得的,因为这样你就可以使用所有只适用于1D数组的语句。不,我需要新的double[,],它将包含{{{{5,6}{7,8}}@helicera-你试过我答案中的第二个查询了吗?这是你要找的东西吗?不,我需要新的Double[,],它将包含{{5,6}{7,8}}@helicera-你试过我回答的第二个问题了吗?是你在找的东西吗?