在C#列表中脱节联盟

时间:2015-05-19 20:56:04

标签: c# linq list arraylist disjoint-union

我有两个列表,我想获得列表,这是两个列表的不相交联合。也就是说,两个列表中的所有项目都不在两个项目中。

此帖子与我的查询几乎相同,但它们的含义与Disjoint Union略有不同:Disjoint Union in LINQ

此代码段有什么问题?

var list1 = new List<int>(){1, 2, 3}
var list2 = new List<int>(){2, 3, 4}
var intersection = list1.Intersect(list2);
list1.AddRange(list2);
list1.RemoveRange(intersection);

我遇到了类型转换问题

2 个答案:

答案 0 :(得分:1)

我没有看到只占用一个参数的RemoveRange方法,因此我不确定您使用的扩展程序。

无论如何,我认为这符合你对不相交联盟的定义:

using System.Collections.Generic;
using System.Linq;
using System;

public class Junk
{
    public static void Main()
    {
        var list1 = new List<int>(){1, 2, 3};
        var list2 = new List<int>() { 2, 3, 4 };

        var union = list1.Union(list2);
        var intersection = list1.Intersect(list2);

        foreach (var i in union.Except(intersection))
        {
            Console.WriteLine(i); //prints 1 and 4
        }
    }
}

答案 1 :(得分:0)

RemoveRange不会删除对象列表(比如AddRange会添加它们)。 它从定义的起始索引开始删除指定数量的对象。

请改为尝试:

foreach (var item in intersection) { list1.Remove(item) }