对字符串列表中的值求和,然后创建字典
本文关键字:然后 创建 字典 求和 字符串 列表 | 更新日期: 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]);
}
}