1

string,intサンプルコンテンツのようにフォーマットされたC#のKeyValuePairリストがあります。

mylist[0]=="str1",5
mylist[2]=="str1",8

いくつかのコードでアイテムの1つを削除し、他のコードに重複する値を追加したいと思います。
したがって、次のようになります。

mylist[0]=="str1",13

定義コード:

List<KeyValuePair<string, int>> mylist = new List<KeyValuePair<string, int>>();

トーマス、擬似コードで説明しようと思います。基本的に欲しい

mylist[x]==samestring,someint
mylist[n]==samestring,otherint

なる:

mylist[m]==samestring,someint+otherint
4

4 に答える 4

6
var newList = myList.GroupBy(x => x.Key)
            .Select(g => new KeyValuePair<string, int>(g.Key, g.Sum(x=>x.Value)))
            .ToList();
于 2012-12-04T07:46:12.960 に答える
2
var mylist = new KeyValuePair<string,int>[2];

mylist[0]=new KeyValuePair<string,int>("str1",5);
mylist[1]=new KeyValuePair<string,int>("str1",8);
var output = mylist.GroupBy(x=>x.Key).ToDictionary(x=>x.Key, x=>x.Select(y=>y.Value).Sum());
于 2012-12-04T07:44:29.620 に答える
1

別の構造を使用します:

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
        dict.Add("test", new List<int>() { 8, 5 });
        var dict2 = dict.ToDictionary(y => y.Key, y => y.Value.Sum());
        foreach (var i in dict2)
        {
            Console.WriteLine("Key: {0}, Value: {1}", i.Key, i.Value);
        }
        Console.ReadLine();
    }
}

最初の辞書は元の構造である必要があります。要素を追加するには、最初にキーが存在するかどうかを確認します。存在する場合は、要素を値リストに追加し、存在しない場合は、辞書に新しい項目を追加します。2番目の辞書は、各エントリの値のリストを合計した最初の辞書の単なる投影です。

于 2012-12-04T07:48:49.870 に答える
0

Linq以外の回答:

Dictionary<string, int> temp = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in mylist)
{
    if (temp.ContainsKey(item.Key))
    {
        temp[item.Key] = temp[item.Key] + item.Value;
    }
    else
    {
        temp.Add(item.Key, item.Value);
    }
}
List<KeyValuePair<string, int>> result = new List<KeyValuePair<string, int>>(temp.Count);
foreach (string key in temp.Keys)
{
    result.Add(new KeyValuePair<string,int>(key,temp[key]);
}
于 2012-12-04T07:53:56.770 に答える