从字符串列表中求和值并创建字典

时间:2015-11-28 20:41:57

标签: c# list sorting

我想计算和排序字符串的排序列表中的所有值

List<string> sortedList = new List<string>();
//name, number, weight
sortedList.Add("A,5,1");
sortedList.Add("A,3,2");
sortedList.Add("B,4,1");
sortedList.Add("B,6,2");

sortedList.Sort();

输入:(列表l)

Output: (List<Dicionary<string,int>> result):

A ( (5*1)+ ( 3*2) )
B ( (4*1) + (6*2) )
new List of dictionary <string, int>

1 - dic["A" , 11]
2 - dic["B" , 16]

2 个答案:

答案 0 :(得分:1)

使用linq你可以做到这一点。

Dictionary<string, int> r = sortedList.Select(x => x.Split(','))
    .GroupBy(x => x[0])
    .ToDictionary(x => x.Key, x => x.Sum(y => int.Parse(y[1])*int.Parse(y[2])));

首先按,拆分所有字符串。然后按数组的第一个元素对它们进行分组然后将它们转换为字典。第一要素是关键。并且值是element2*element3

的总和

答案 1 :(得分:0)

首先,您需要拆分字符串,以便获得乘法和键。 您可以使用Split方法进行拆分。此外,您需要在拆分后跳过第一个元素。

var multArray = sortedList.Select (x=>int.Parse (x.Split(',')[1])*int.Parse (x.Split(',')[2]));
var keyArray = sortedList.Select (x=>x.Split(',')[0]);

multArray是带有和的数组,keyarray是带有键的数组。然后你需要填充字典。

for (int i = 0; i  < keyArray.Count(); i ++) 
{
    if (dictionary.ContainsKey (keyArray[i])) 
    { 
        dictionary[keyArray[i]] += multArray [i];
    } 
    else
    {
        dictionary.Add (keyArray[i], multArray [i]);
    }
}