2017-01-17 57 views
-4

爲什麼我無法從我的數組'vec'中獲取絕對形式的最大絕對值?錯誤在哪裏?從數組c獲取maxAbs#

return vec.Select(Math.Abs).Max(); 
+2

該代碼適用於我。 'vec'中有什麼?有什麼問題? –

+1

你需要更加明確,你寫的代碼看起來應該可以工作。你是否收到編譯器錯誤,或者你得到了一個你不期望得到的值?你需要詳細說明你的問題。使用http://dotnetfiddle.net/創建一個示例程序,重新創建問題並將整個代碼發佈到您的問題中。 –

+0

當'vec'不包含任何元素時,它可能會失敗。 –

回答

2

你,很可能意味着ArgMax,不最大

元素 ...這些都是最大吸收值

的LINQ沒有按」 t提供這樣一種方法,但您可以輕鬆地模擬它:

var result = vec.Aggregate((a, s) => Math.Abs(a) > Math.Abs(s) ? a : s); 

測試:

int[] vec = new int[] { 1, -3, 2 }; 

var result = vec.Aggregate((a, s) => Math.Abs(a) > Math.Abs(s) ? a : s); 

// The output is "-3" (the element in the array) 
Console.Write(result); 

編輯:如果你正在尋找該數組指數,所有你所要做的就是修改代碼位:

var result = vec 
    .Select((value, index) => new { 
     Value = value, 
     Index = index }) 
    .Aggregate((a, s) => Math.Abs(a.Value) > Math.Abs(s.Value) ? a : s) 
    .Index; 

// Output: "vec[1] == -3" 
Console.Write($"vec[{result}] == {vec[result]}"); 
+0

如果數組只接收類型double,例如:3,1 | 2,1 | 1,1會輸出3? (以我的例子爲例) –

+0

@JorgeAndré:'[3.1,2.1,1.1]'的結果將是'3.1'(數組元素) –

+0

是的我的輸出是相同的,但我需要3而不是3.1 。多數民衆贊成我的問題,我不能解決 –