c# - 合并两个列表并组合对象值

标签 c# list merge

我已经做了很多挖掘工作,但似乎找不到这个特定问题的答案;类似问题的答案,但不是这样。

基本上,我要做的是采用两个 C# 列表,这两个列表都包含一系列由字符串-整数对组成的 C# 对象,然后将它们合并在一起,连接相似对象的值。

假设我的项目等级是这样的;

public class Object
{
    public string Name;
    public int Value;
}

我们还会说我的列表看起来像这样;

    objectList1             objectList2
 Name        Value       Name        Value
Object1        1        Object1        1
Object2        1        Object2        1
Object3        1
Object4        1
Object5        1

我的目标是将objectList2 的Objects 的内容组合到objectList1 中相应的Objects。在此示例中,这意味着 objectList1 完成后将如下所示;

 Name        Value
Object1        2
Object2        2
Object3        1
Object4        1
Object5        1

现在我知道这可以通过 foreachFindIndex() 调用来实现,但我几乎肯定有更有效的方法来解决这个问题。如果我错了,那很好,但我想知道我是否可以优化它,因为我的直觉告诉我必须有更简单的方法。

最佳答案

我相信你想做的事:

var contents = sample.Concat(example).GroupBy(n => n.Name);

基本上它会创建一个分组,但它会将列表附加在一起。然后根据名称进行分组,这将提供一个数字指示器,表明存在多少个相同的名称。基本上,你最终会得到一个 IGrouping<Key, Value> .

例如:

var merge = new List<Content>();
var contents = sample.Concat(example).GroupBy(n => n.Name);
foreach(var item in contents)
     merge.Add(new Content() { Name = item.Key, Value = item.Sum(value => value.Value) });

如果你愿意,你也可以用所有的 Linq 来做:

    var contents = example.Concat(sample)
        .GroupBy(n => n.Name)
        .SelectMany(content => 
                    content.Select((item, i) => new { Name = content.Key, Value = content.Sum(v => v.Value) }).Distinct());

关于c# - 合并两个列表并组合对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518167/

相关文章:

python - 在 Python 中基于一个属性合并两个嵌套列表

c++ - push_backing 到指针列表中导致内存泄漏

python - 组合字符串列表,提高性能

python - 如何在 Python 中合并来自 3 个不同列表的嵌套子列表的元素?

c# - 最佳实践 : successfully merge two software?

c# - 当我更改绑定(bind)页面属性时,为什么我在 wpf 中的主窗口没有更新?

c# - 模拟 MVC Controller 中的内在依赖

c# - UrlHelper.Action 包含不需要的附加参数

c# - 使用Continuation链接任务的正确方法

java - 将两个二维数组扩展为一个更大的数组