比较两组A和B并需要处理A - B,B - A和A与B相交

时间:2014-10-15 20:43:37

标签: c# linq set

我需要比较两组 A B 。我需要为

进行处理
  • A交叉B(相同的元素)
  • A - B(A中不在B中的元素)和
  • B - A(B中不在A中的元素)。

我考虑过的方法:

  1. 我可以使用算法described here(并粘贴在下面),并在线进行处理。这很好,因为它只遍历每个集合中的元素一次。

    Given input sets A,B, each a strictly ascending list. 
    Initialize A\B and B\A as empty lists.
    
    Until A or B is empty, compare the heads of both lists
        If the heads are equal, remove them.
        If the head of A preceeds the head of B, remove the head from A
           and include it in A\B.
        If the head of B preceeds the head of A, remove the head from B
           and include it in B\A.
    
    Now A or B is empty.
    Transfer entries left in A to A\B or entries left in B to B\A.
    
  2. 我可以使用Hashset<T>IntersectExceptWith)或Enumerable Linq扩展方法(Intersect,{{}上的方法执行此操作3}})。它们的优点是使我的代码/意图更具可读性,但我最终会多次迭代原始集。

  3. 问题: 有没有一种方法,我可以获得选项#2的可读性与#1的性能?

0 个答案:

没有答案