在列表中查找Union,Subtract,Intersect的函数

时间:2011-08-01 05:11:17

标签: c# .net .net-2.0

假设我有两个列表:List<int> l1,List<int>l2

请帮我解决2个列表之间的联合,减法和交叉。感谢。

注意:我使用的是.NET 2.0,因此我无法使用LINQ。感谢。

3 个答案:

答案 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 会帮助你。