假设我有两个列表:List<int> l1,
和List<int>l2
请帮我解决2个列表之间的联合,减法和交叉。感谢。
注意:我使用的是.NET 2.0,因此我无法使用LINQ。感谢。
答案 0 :(得分:4)
以下是伪代码的基本算法:
UNION:
Copy List1 to UnionList
For each Item in List2
If Item is not in UnionList
Add Item to UnionList
Next
Return UnionList
SUBTRACT:
Copy List1 to DifferenceList
For each Item in List2
If Item is in DifferenceList
Remove Item from DifferenceList
Next
Return DifferenceList
INTERSECT:
Create new IntersectList
For Each Item in List1
If Item is in List2
Add Item to IntersectList
Next
Return IntersectList
答案 1 :(得分:3)
您可以使用LINQ - 而不是.NET 3.5中的LINQ。您可以使用LINQBridge,或者如果真的只想Union
/ Except
/ Intersect
,您可以查看{{3}的来源(我自己实现的LINQ to Objects)。后者使用仅在.NET 3.5中使用的HashSet<T>
,但您可以使用Dictionary<,>
来伪造它。
重复使用List<T>.Contains
的问题是每个 Contains
操作都是O(N)。如果您有少量数据或者您只是希望此代码能够看到这三个操作的原理,那就没关系,但对于“真正的”工作,您需要更高效的包含检查。
答案 2 :(得分:1)
我认为 LINQBridge 会帮助你。