【问题标题】:Disjoint Union in C# ListsC# 列表中的不相交联合
【发布时间】:2015-07-31 21:25:36
【问题描述】:

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

这篇文章的查询与我的几乎相同,只是它们的含义与 Disjoint Union 略有不同:Disjoint Union in LINQ

这段代码 sn-p 有什么问题?

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);

我遇到了类型转换问题

【问题讨论】:

    标签: c# linq list arraylist disjoint-union


    【解决方案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
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 2018-01-05
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        相关资源
        最近更新 更多