【问题标题】:Finding Max Question寻找最大问题
【发布时间】:2011-09-09 17:39:39
【问题描述】:

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

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

救命!

谢谢!

【问题讨论】:

  • 你能再澄清一点吗?您希望如何比较每个“层”中的元素?你想在所有这些中最大化(每层)吗?结果将如何映射到图层?不是List<Double>吗?
  • 如果使用double[][] 而不是double[,] 可能值得,因为这样您就可以使用所有仅适用于一维数组的语句。

标签: c# linq multidimensional-array foreach max


【解决方案1】:
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();

【讨论】:

  • 不,我需要new Double[,],其中将包含{{5,6}{7,8}}
  • @helicera - 您是否尝试了我回答中的第二个查询?是您正在寻找的东西吗?
【解决方案2】:

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

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

这里没什么聪明的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 2018-02-21
    相关资源
    最近更新 更多