【发布时间】:2013-05-02 15:59:01
【问题描述】:
我想知道在 LINQ 中是否有可能实现以下方面的目标:
newList: { [1], [2] }
oldList: { [2], [3], [4], [5] }
resultantList = { [1], [2, 2], [3], [4], [5] }
好吧,那是过于简单化了。让我们说:
Class A
{
public string Name;
public IList<B> Items;
public bool Equals(A obj)
{
return obj.Name == Name;
}
}
newList<A> = {{ Name = "A", Items[1]}, { Name = "B", Items[1] }}
oldList<A> = {{ Name = "C", Items[2]}, { Name = "A", Items[2] }, { Name = "D", Items[1] }, { Name = "E", Items[1] },}
mergedList<A> = {{ Name = "A", Items[3]}, { Name = "B", Items[1]}, { Name = "C", Items[2]}, { Name = "D" , Items[1]}, { Name = "E" , Items[1]}}
请注意,对于 Name="A" 的实例,该列表实际上是两个列表的合并列表。顺序无关紧要,实际上相等更复杂。
我希望在类型上实现这一点(即以下工作,但效率低下):
var fragments = newGeometryFragments.Except(oldGeometryFragments).ToList();
fragments.AddRange(oldGeometryFragments.Except(newGeometryFragments).ToArray());
var mergedFragments = (from newGeometry in newGeometryFragments
from oldGeometry in oldGeometryFragments
where newGeometry.Equals(oldGeometry)
select MergeGeometryFragments(newGeometry, oldGeometry)).ToArray();
fragments.AddRange(mergedFragments);
【问题讨论】:
-
列表中项目的顺序是否相关?
-
搜索 Linq“完全外连接”
-
所以你基本上想要一个联合,但是由于在一个二元素列表中而显示了重复的值?
-
订单不相关。基本上我想要的是一个合并,它将两个列表中的项目连接起来,并且它检测到的“合并”项目是等效的(即 MergeGeometryFragments 方法)。
-
这几乎是一个联盟。只有我希望它在它检测到的项目上调用一个方法,并返回一组合并的项目。
标签: c# linq list merge equality