3

我有两个列表,我想获得两个列表的不相交并集的列表。也就是说,两个列表中都不包含的所有项目。

这篇文章的查询与我的几乎相同,只是它们的含义与 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);

我遇到类型转换问题

4

2 回答 2

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
        }
    }
}
于 2015-05-19T21:05:04.533 回答
0

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

试试这个:

foreach (var item in intersection) { list1.Remove(item) }
于 2015-05-19T21:11:21.517 回答