2011-01-17 4 views
0
SortedDictionary<int, string> typeDictionary = new SortedDictionary<int, string>(); 
SortedDictionary<int, int> lengthDictionary = new SortedDictionary<int, int>(); 

次のようにlengthDictionaryは、キーと値のペアの値があります。SortedDictionaryから整数値の合計を実行するにはどうすればよいですか?

<1,20> 
<2,8> 
<3,10> 
<4,5> 

私は次のように

<1,20> 
<2,20+8=28> // 20 from key 1 
<3,28+10=38> // 28 from key 2 
<4,38+5=43> // 38 from key 3 

結果はこのようにすべきであるように私に新しいリストを返しますLINQクエリたい:

<1,20> 
<2,28> 
<3,38> 
<4,43> 
+3

それはLINQでなければなりませんか?または、結果を得ることに満足していますか? –

+0

私はまだ 'typeDictionary'がどこに来るかについて非常に混乱しています。短いしかし完全な例は本当に助けになります。 –

+0

は、タイプ辞書... – PramodChoudhari

答えて

0

クエリが必要であり、必ずしも新しいソートされた辞書ではない場合は、このようなものを作ることができます。

int runningSum = 0; 
var query = (from pair in lengthDictionary 
      let innerSum = (runningSum += pair.Value) 
      select new 
      { 
       Key = pair.Key, 
       Value = innerSum 
      }); 

// make a new SortedDictionary? 
var newDictionary = new SortedDictionary<int, int>(query.ToDictionary(pair => pair.Key, pair => pair.Value)); 

// display to confirm result 
foreach (var pair in newDictionary) 
    Console.WriteLine("{0}\t{1}", pair.Key, pair.Value); 

注:非LINQの答えは間違いなくあなたが出力として新しい辞書をしたい場合は特に、単純かもしれません。

var newDictionary = new SortedDictionary<int, int>(); 
int runningTotal = 0; 
foreach (var pair in lengthDictionary) 
{ 
    runningTotal += pair.Value; 
    newDictionary.Add(pair.Key, runningTotal); 
} 
2
int tempTotal = 0; 
Dictionary<int, int> result = lengthDictionary.ToDictionary(p => p.Key, p => 
               { 
                 tempTotal += p.Value; 
                 return tempTotal; 
               }); 

注:テストされていません。また、投影されるタイプを変更することもできます。

編集:あなたが注文した結果たい場合は、ここに私のオリジナルの答えがされています

int runningTotal = 0; 
lengthDictionary.Select(p => 
          { 
           runningTotal += p.Value; 
           return new {Key = p.Key, Value = runningTotal}; 
          }); 
+0

+1と答えを返すように答えを修正しました。 'Dictionary 'です。あなたが気にしないといいですね:) –

+0

辞書からアイテムが返される順序は未定義で、おそらくuser578083が探していたものではありません。 –

+0

@Jonas Elfstrom、lengthDictionaryは辞書ではありません。 – tster

0

をここに私のアプローチです:

SortedDictionary<int, int> dictionary = new SortedDictionary<int, int>() 
              { 
               {1, 20}, 
               {2, 8}, 
               {3, 10}, 
               {4, 5} 
              }; 


var result = Enumerable 
    .Range(0, dictionary.Keys.Count) 
    .Select(i => new 
         { 
          Key = dictionary.Keys.Skip(i).First(), 
          Value = dictionary.Take(i+1).Select(k => k.Value).Sum() 
         }) 
    .ToDictionary(k => k.Key, v => v.Value); 



foreach(var r in result) 
{ 
    Console.WriteLine("Key = {0}, Value = {1}", r.Key, r.Value); 
} 


Console.WriteLine("done"); 

Console.ReadLine(); 
関連する問題