• list交集


    在C#语言程序设计中,List集合是常用的集合数据类型,在涉及集合类型的运算中,有时候我们需要计算2个List集合中共有的数据,即对2个List集合求交集运算。此时可以使用C#语言提供的Intersect方法快速来实现两个集合之间的交集运算。Except方法调用的格式为:List1.Intersect(List2),List1和List2是相同类型的List集合数据,求出交集数据后可再使用ToList方法转换回List集合类型数据。

    例如下列两个集合都为List<int>集合,list1包含的数据有: 1, 2, 3, 4, 5, 6, 7 。list2包含的数据有:4, 5, 6, 7, 8, 9, 10。针对list1和list2求交集可使用以下语句:

       List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };        List<int> list2 = new List<int>() { 4, 5, 6, 7, 8, 9, 10 };

       List<int> jiaojiList = list1.Intersect(list2).ToList();//使用Intersect方法求交集运算。

    最后得到的结果集合jiaojiList中的数据为:4,5,6,7。

    上述语句只针对普通基础的值类型,如果针对自定义类的对象的话,如果要求交集运算,则是需要相同的对象引用才算是交集中的数据,而非两个对象相同即是交集。

    下面以2个例子来阐述上述加粗这部分的含义,首先我们定义要使用测试的类为TestModel类,类中只有简单的Index和Name属性,具体结构如下:

    1
    2
    3
    4
    5
    6
    public class TestModel
     {
          public int Index { set; get; }
     
         public string Name { set; get; }
     }

    (1)例子1:list1集合和list2集合中的对象元素分别来之不同的对象引用,这list1和list2交集元素个数为0。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    List<TestModel> list1 = new List<TestModel>();
    list1.Add(new TestModel() { Index = 1, Name = "TestModel1" });
    list1.Add(new TestModel() { Index = 2, Name = "TestModel2" });
    list1.Add(new TestModel() { Index = 3, Name = "TestModel3" });
    list1.Add(new TestModel() { Index = 4, Name = "TestModel4" });
     
    List<TestModel> list2 = new List<TestModel>();
    list2.Add(new TestModel() { Index = 3, Name = "TestModel3" });
    list2.Add(new TestModel() { Index = 4, Name = "TestModel4" });
    list2.Add(new TestModel() { Index = 5, Name = "TestModel5" });
    list2.Add(new TestModel() { Index = 6, Name = "TestModel6" });  

    从运行的结果来看:jiaojiList为空集合,里面没有任何对象。

    (2)例子2:list1集合和list2集合中的部分元素的对象引用是一致的时候,list1和list2交集的元素为这些相同对象引用的数据。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    List<TestModel> list1 = new List<TestModel>();
    List<TestModel> list2 = new List<TestModel>();
     
    TestModel model1 = new TestModel() { Index = 1, Name = "TestModel1" };
    TestModel model2 = new TestModel() { Index = 2, Name = "TestModel2" };
    TestModel model3 = new TestModel() { Index = 3, Name = "TestModel3" };
    TestModel model4 = new TestModel() { Index = 4, Name = "TestModel4" };
     
    list1.Add(model1);
    list1.Add(model2);
    list1.Add(model3);
     
    list2.Add(model2);
    list2.Add(model3);
    list2.Add(model4);
     
    List<TestModel> jiaojiList = list1.Intersect(list2).ToList(); 

    从运行的结果来看:jiaojiList含有2个元素,分别为model2和model3。

    关于对象集合的交集的运算,例子1和例子2的差别读者详细斟酌下即可理解,是以对象的引用来判断的,而非对象的每个属性值都相同来判断,针对于自定义类对象的List集合求交集的时候需要注意这些事项。

    备注:原文转载自博主个人技术站点IT技术小趣屋,原文链接C#编程中两个List集合使用Intersect方法求交集_IT技术小趣屋

  • 相关阅读:
    40+精彩的HTML5实例和教程
    10+不错的设计资源和灵感的网站
    js利用点击事件做一个简单的计算器
    如何在canvas中画出一个太极图
    利用canvas画一个实时时钟
    利用随机数与定时器做一个简单的伪随机抓阄游戏
    IE8模对话框无法返回至主页面的解决方法
    C# String.Format字符串中包含"{" "}"时需注意的问题
    [Struts2应用开发] 统一的登录验证
    Visual Studio 2008 Express中文版 ‘加载此属性页是出错’ 解决方法
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/10854853.html
Copyright © 2020-2023  润新知