2016-12-19 17 views
0

私はすべての結果を返すKeyValuePairを持っています。私は値ごとにnレコードの数を取る必要があります。KeyValuePair別個の値ごとにn個の結果を取る

var organiser = new List<KeyValuePair<string, string>>(); 
foreach(someinfo) 
{ 
    organiser.Add(new KeyValuePair<string, string>("Name", Name)); 
} 
foreach (var p in organiser.GroupBy(KeyValuePair =>KeyValuePair.Value)) 
{ 
    <p>@p.Key</p> 
} 

しかし、この:私は「ハリー」と「サリー」を持っている場合

だから、私はハリーが5時間の数字と時間

私は現在、これを持って

のサリー5の数をリストする必要がありますハリーとサリーだけが返されますが、コードにtake()を追加する必要はありません。

どうすればいいですか?

+5

質問になります。辞書を使用できるときにKeyValuePairのリストを使用するのはなぜですか?何かがあれば、 'Dictionary >'を使うことができます。これにはあらかじめグループ化された名前が付属しています。 – Abion47

答えて

1

はキーによっていくつかのLINQ、グループを使用して、5を取る:

var data = new List<KeyValuePair<string, string>> 
{ 
    new KeyValuePair<string, string>("Harry", "1"), 
    new KeyValuePair<string, string>("Harry", "2"), 
    new KeyValuePair<string, string>("Harry", "3"), 
    new KeyValuePair<string, string>("Harry", "4"), 
    new KeyValuePair<string, string>("Harry", "5"), 
    new KeyValuePair<string, string>("Harry", "6"), 
    new KeyValuePair<string, string>("Harry", "7"), 
    new KeyValuePair<string, string>("Sally", "1"), 
    new KeyValuePair<string, string>("Sally", "2"), 
    new KeyValuePair<string, string>("Sally", "3"), 
    new KeyValuePair<string, string>("Sally", "4"), 
    new KeyValuePair<string, string>("Sally", "5"), 
    new KeyValuePair<string, string>("Sally", "6"), 
}; 


var output = data.GroupBy(x => x.Key) 
    .SelectMany(x => x.Take(5)); 

foreach (var item in output) 
{ 
    Console.WriteLine($"Key: {item.Key}, Value: {item.Value}"); 
} 

出力はいえ

Key: Harry, Value: 1 
Key: Harry, Value: 2 
Key: Harry, Value: 3 
Key: Harry, Value: 4 
Key: Harry, Value: 5 
Key: Sally, Value: 1 
Key: Sally, Value: 2 
Key: Sally, Value: 3 
Key: Sally, Value: 4 
Key: Sally, Value: 5 
Press any key to continue . . . 
+0

ありがとうKevin Smith –

関連する問題