我有一个文件,其中一行有两个。有一个名称及其
价值。有些名称相同,我希望我的代码识别重复项并总结其值
示例:
第1行:3(行数(名称值)
第2行:ABC 5
第3行:XYZ 8
第4行:ABC 3
感谢您的所有答复。
答案 0 :(得分:2)
最简单的方法是使用ReadLines
枚举文件,然后使用LINQ进行分组/聚合以删除重复项并求和值
第一行是无关紧要的,因此您可以简单地Skip
那个
var result = File.ReadLines(@"c:\pathto\yourfile.txt")
.Skip(1) // skip the first line
.Select(line => line.Split(' ')) // Split on the space gving an array of 2 elements
.GroupBy(x => x[0]) // group by the first element
.Select(g => new {
Key = g.Key,
Value = g.Sum(x => int.Parse(x[1]))
}); // select into an anonymous object
演示:https://rextester.com/KSNI79479
(注意,演示程序无法使用文件,但会使用数组复制文件的内容)
答案 1 :(得分:1)
您需要解决这个问题,可以使用Dictionary存储结果。
步骤1:读取文件。您可以使用File.ReadLines。
第2步::除了第一次以外,遍历所有行,并根据分隔符(您的情况是空格)分割它们
步骤3::如果键(步骤2中字符串拆分的第一部分)已经在字典中,则需要对值求和。否则,在字典中创建一个新条目。
结果可以存储在字典中。您需要确保对重复项进行汇总。
var lines = File.ReadLines(@"e:\sample.txt");
var dictionary = new Dictionary<string,int>();
foreach(var line in lines.Skip(1))
{
var values = line.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries);
if(dictionary.TryGetValue(values[0],out var value))
{
dictionary[values[0]] = (value +=int.Parse(values[1]));
}
else
{
dictionary.Add(values[0], int.Parse(values[1]));
}
}
样本输入
3
ABC 5
XYZ 8
ABC 3
样本输出