2011-06-07 84 views
1

我有這樣一個列表List<Double[,]>。讓我們在列表中調用每個2維數組。所以我應該比較每個圖層中的每個元素並提取最大值。並構建最大值層。查找最大的問題

我該怎麼做?也許使用LINQ?或者foreach循環結構?

幫助!

並且謝謝!

+0

你能澄清一點嗎?你想如何比較每個「圖層」中的元素?你想在所有的(每層)最大?結果如何映射到一個圖層?這不是一個'列表'嗎? – Cameron 2011-06-07 02:05:21

+1

如果可能值'double [] []'而不是'double [,]''因爲那麼你可以使用所有隻能用於一維數組的語句。 – ja72 2011-06-07 04:05:04

回答

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

沒有聰明這裏。

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(); 
+0

不,我需要'新的Double [,]''它將包含'{{5,6} {7,8}} – lexeme 2011-06-07 04:26:29

+0

@helicera - 你是否嘗試了我的答案中的第二個查詢?這是你正在尋找的東西嗎? – 2011-06-30 18:19:40