我有两个列表,我想获得列表,这是两个列表的不相交联合。也就是说,两个列表中的所有项目都不在两个项目中。
此帖子与我的查询几乎相同,但它们的含义与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);
我遇到了类型转换问题
答案 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) }