在list <object>中合并的最佳方法,其中object包含值列表

时间:2019-04-04 12:57:36

标签: c# list linq generic-list

我有一个IList<Row>,其中Row包含一个单元格IList<Cell>的列表。这些单元格具有ToStringToDouble等。

我想遍历该行列表,并检查是否存在cell[index]具有相同值的行。假设单元格3。
如果存在具有相同值的行,则应将这些行合并为一行。可以肯定的是,除了具有数量的单元格以外,所有单元格都是相同的(如果使用相同的键),那么说这是单元格4。因此,应该合并(删除1个),唯一的区别在于值是两者的总和。

我尝试创建一个Dictionary<string, double>。我遍历了所有行,检查map是否包含键,如果不包含-> merge(也使用扩展方法Merge进行了此操作,但思路相同)。
遍历之后,我创建了一个新列表,将字典放在其中,并遍历了旧列表以获取其他信息。

好吧,我认为我的方法太长了,应该有一种方法可以更轻松地完成此操作,可能是通过LINQ或其他方法。关于如何正确执行此操作的任何想法?还是你们认为我的方法还不错?

1 个答案:

答案 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())) }
                                                }
                                   });