我已经做了很多挖掘工作,但似乎找不到这个特定问题的答案;类似问题的答案,但不是这样。
基本上,我要做的是采用两个 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
现在我知道这可以通过 foreach
和 FindIndex()
调用来实现,但我几乎肯定有更有效的方法来解决这个问题。如果我错了,那很好,但我想知道我是否可以优化它,因为我的直觉告诉我必须有更简单的方法。
最佳答案
我相信你想做的事:
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/