zoukankan      html  css  js  c++  java
  • C# 对List取交集、差集以及并集

    List<T>以string类型为例,实际应用中可换做其他类型:

    1:取交集

     // 取交集
            static void Intersection()
            {
                List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
                List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
                List<string> list3 = new List<string>();
                list3 = list1.Intersect(list2).ToList();
     
                Console.Write(list3.Count);  //交集的个数,如果个数为0,说明没有交集
                Console.WriteLine();
                foreach (var s in list3)      // 各个值
                {
                    Console.Write(s);
                    Console.WriteLine();
                }
            }

    结果:

    BB

    GG

    2:取差集

     // 取差集
            static void Exception()
            {
                List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
                List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
                List<string> list3 = new List<string>();
                list3 = list1.Except(list2).ToList();
     
                Console.Write(list3.Count);  //差集的个数,如果个数为0,说明list1中存在的值也全都存在于list2中
                Console.WriteLine();
                foreach (var s in list3)      // 各个值
                {
                    Console.Write(s);
                    Console.WriteLine();
                }
            }

    结果:

    AA

    CC

    EE

    如果把取差集代码中的
     list3 = list1.Except(list2).ToList();
    换成
     list3 = list2.Except(list1).ToList();

    结果如下:

    DD

    MM

    listA.Except(B).ToList();

    注:差集表示listA中哪些值是listB中所不存在的;

    3:取并集

    // 取并集
            static void Union()
            {
                List<string> list1 = new List<string> { "AA", "BB", "CC", "EE", "GG" };
                List<string> list2 = new List<string> { "BB", "DD", "GG", "MM" };
                List<string> list3 = new List<string>();
                list3 = list1.Union(list2).ToList();
     
                Console.Write(list3.Count);  //并集的个数,一般不会为0,除非list1和list2中的元素个数都为0
                Console.WriteLine();
                foreach (var s in list3)      // 各个值
                {
                    Console.Write(s);
                    Console.WriteLine();
                }
            }

    结果:

    AA

    BB

    CC

    EE

    GG

    DD

    MM

    如果把上面取并集代码中的
    list3 = list1.Union(list2).ToList();
    换成
    list3 = list1.Concat(list2).ToList();
    或
    list1.AddRange(list2);
    list3.AddRange(list1);
    则将会保留重复项

    结果如下:

    {AA, BB, CC, EE, GG, BB, DD, GG, MM }

    原文: CSDN

  • 相关阅读:
    BZOJ 1207
    Poj 2096 Collecting Bugs (概率DP求期望)
    HDU 5159 Card (概率求期望)
    HDU 4649 Professor Tian (概率DP)
    HDU 4652 Dice (概率DP)
    HDU5001 Walk(概率DP)
    C++中的 Round(),floor(),ceil()
    HDU 5245 Joyful(概率题求期望)
    poj 3071 Football (概率DP水题)
    关于一个群号分解的最大质数的求法
  • 原文地址:https://www.cnblogs.com/Cein/p/11465737.html
Copyright © 2011-2022 走看看