2011-10-18 15 views
2

を使用して多次元配列から合計が必要です。これは多次元オブジェクト配列であることに注意してください。 i.Keyは文字列値で、i.Valueは合計する必要があるint値です。 は、私は次のコードを持ってLINQ

は、事前にありがとうそれは明確にしている場合、より効率的である

int sum = ccdata.Sum(x => (int) x[1]); 

+2

なぜ2つをオブジェクト配列に入れて、すべてをボクシングしていますか? –

+0

'i.Value'は文字列ですか?なぜあなたはそれを解析するのですか、最初は数字ではないのですか? – abatishchev

+0

もしI.Valueがすでにintであればint.Parseは文字列を期待してコンパイルされません。それは文字列かintか? –

答えて

2
dic.Sum(i => Int32.Parse(i.Value)); // if i.Value is string instead of just int 

dic.Sum(i => i.Value); // if string 

または

ccdata.Sum(i => (int)i[1]); // if i[1] is object instead of just int 

ccdata.Sum(i => i[1]); // if int 
+0

'i [1]'のコンパイル時の型は単に 'object'なので、後者はコンパイルに失敗します。 –

+0

@ジョン:確かに。ありがとう! – abatishchev

2

あなたは非常にこの方法でそれをやっている理由は不明だが、それはそれらを合計することはかなり簡単です...あなたが使用:

var ccdata = dict1.Select(i => new { i.Key, Value = Int32.Parse(i.Value) }) 
        .ToArray(); 

あなたはコンパイル時の型の安全性なしボクシングで終わるその方法:

int sum = ccdata.Sum(x => x.Value); 

(私はあなたが実際に何か別の理由でccdataを望んでいると仮定しています。それ以外の場合は、abatishchevのソリューションを使用し、完全にあなたの既存のコードを取り除く。)

1

i.Valueは、あなたの内側の配列内の2番目の位置にあります。 そのようにする必要があります:

var sum = cdata.Sum(arr => (int)arr[1]); 
関連する問題