В поисках Макс вопроса - PullRequest
1 голос
/ 07 июня 2011

У меня есть такой список List<Double[,]>.Давайте назовем каждый 2-мерный массив в списке слоем.Поэтому я должен сравнить каждый элемент в каждом слое и извлечь максимум.И построить слой максимальных значений.

Как мне это сделать?Может быть, с использованием LINQ?Или конструкция цикла foreach?

Помогите!

И спасибо!

Ответы [ 2 ]

6 голосов
/ 07 июня 2011
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();
2 голосов
/ 07 июня 2011

Предполагая, что все ваши слои имеют одинаковый размер 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] );

Ничего умного здесь.

...