我有一个IList<Row>
,其中Row
包含一个单元格IList<Cell>
的列表。这些单元格具有ToString
,ToDouble
等。
我想遍历该行列表,并检查是否存在cell[index]
具有相同值的行。假设单元格3。
如果存在具有相同值的行,则应将这些行合并为一行。可以肯定的是,除了具有数量的单元格以外,所有单元格都是相同的(如果使用相同的键),那么说这是单元格4。因此,应该合并(删除1个),唯一的区别在于值是两者的总和。
我尝试创建一个Dictionary<string, double>
。我遍历了所有行,检查map是否包含键,如果不包含-> merge(也使用扩展方法Merge进行了此操作,但思路相同)。
遍历之后,我创建了一个新列表,将字典放在其中,并遍历了旧列表以获取其他信息。
好吧,我认为我的方法太长了,应该有一种方法可以更轻松地完成此操作,可能是通过LINQ或其他方法。关于如何正确执行此操作的任何想法?还是你们认为我的方法还不错?
答案 0 :(得分:0)
尝试:
var mergedRows = rows.GroupBy(x => x.Cells[0].Value.ToString())
.Select(x => new Row() { Cells = new List<Cell>
{
new Cell() { Value = x.Key },
new Cell() { Value = x.Sum(y => int.Parse(y.Cells[1].Value.ToString())) }
}
});