我有這樣一個列表List<Double[,]>
。讓我們在列表中調用每個2維數組。所以我應該比較每個圖層中的每個元素並提取最大值。並構建最大值層。查找最大的問題
我該怎麼做?也許使用LINQ?或者foreach循環結構?
幫助!
並且謝謝!
我有這樣一個列表List<Double[,]>
。讓我們在列表中調用每個2維數組。所以我應該比較每個圖層中的每個元素並提取最大值。並構建最大值層。查找最大的問題
我該怎麼做?也許使用LINQ?或者foreach循環結構?
幫助!
並且謝謝!
假設所有圖層的大小相同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]);
沒有聰明這裏。
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();
不,我需要'新的Double [,]''它將包含'{{5,6} {7,8}} – lexeme 2011-06-07 04:26:29
@helicera - 你是否嘗試了我的答案中的第二個查詢?這是你正在尋找的東西嗎? – 2011-06-30 18:19:40
你能澄清一點嗎?你想如何比較每個「圖層」中的元素?你想在所有的(每層)最大?結果如何映射到一個圖層?這不是一個'列表'嗎? –
Cameron
2011-06-07 02:05:21
如果可能值'double [] []'而不是'double [,]''因爲那麼你可以使用所有隻能用於一維數組的語句。 – ja72 2011-06-07 04:05:04