对字符串列表中的值求和,然后创建字典

本文关键字:然后 创建 字典 求和 字符串 列表 | 更新日期: 2023-09-27 18:24:49

我想计算并求和像这样的字符串排序列表中的所有值

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();

输入:(列表1)

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]

对字符串列表中的值求和,然后创建字典

使用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])));

首先用,分割所有字符串。然后按数组的第一个元素对它们进行分组。然后把它们转换成字典。第一个要素是关键。并且该值是CCD_ 2 的和

首先需要拆分字符串,以便获得乘法和键。您可以使用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]);
    }
}