2017-01-17 2 views
-4

なぜ絶対値形式で最大abs値を持つ配列 'vec'から要素を取得できないのですか?エラーはどこですか?配列CからmaxAbsを取得する#

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

そのコードは私のためにうまく動作します。 'vec'には何がありますか?どうしたの? –

+1

もっと明示する必要があります。書かれているコードは、動作するはずです。あなたはコンパイラのエラーが出ているのですか、それとも期待していない価値を得ていますか?あなたはあなたの質問を精緻化する必要があります。 http://dotnetfiddle.net/を使用して、問題を再現したサンプルプログラムを作成し、そのコード全体を質問に投稿してください。 –

+0

'vec'に要素が含まれていないと失敗する可能性があります。 –

答えて

2

あなたは、おそらく、ARGMAX、ないを意味マックス

最大絶対値を持つ要素 ...

LINQの doesnの」そのような方法を提供しますが、簡単にエミュレートすることができます:

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 。それは私の問題だと私は解決する –

関連する問題