泛型集合求交集,并集,差集

今天工作遇到两个集合要求出差集,百度了一下然后做了以下测试,跟大家分享一下。

目的:求出自己所需要的集合(差集,交集,并集)

以下是自己写的测试代码

 class Program
    {
        public class MyClass
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
        static void Main(string[] args)
        {
            var list1 = new List<MyClass>();
            var list2 = new List<MyClass>();
            for (int i = 1; i < 5; i++)
            {
                var item = new MyClass();
                item.Name = "mumu" + i.ToString();
                item.Age = 24 + i;
                list1.Add(item);
            }
            for (int i = 3; i < 7; i++)
            {
                var item = new MyClass();
                item.Name = "mumu" + i.ToString();
                item.Age = 24 + i;
                list2.Add(item);
            }
            
            foreach (var model in list1)
            {
                Console.WriteLine("list1: " + model.Name + ";" + model.Age);
            }
            foreach (var model in list2)
            {
                Console.WriteLine("list2: " + model.Name + ";" + model.Age);
            }
            //根据List1求和list2的差集
            var list = list1.Except(list2, new Student()).ToList();
            foreach (var model in list)
            {
                Console.WriteLine("list12 " + model.Name + ";" + model.Age);
            }
            //根据List2求和list1的差集
            var list3 = list2.Except(list1, new Student()).ToList();
            foreach (var models in list3)
            {
                Console.WriteLine("list21 " + models.Name + ";" + models.Age);
            }
            //求list2和list1的交集
            list2.Intersect(list1, new Student()).ToList().ForEach(m =>
            {
                Console.WriteLine("listIntersect " + m.Name + ";" + m.Age);
            });
            //根据list2 求list2与list1的并集
            list2.Union(list1, new Student()).ToList().ForEach(m =>
            {
                Console.WriteLine("listUnion " + m.Name + ";" + m.Age);
            });
            //使用RemoveAll获取符合条件的集合
            list1.RemoveAll(m =>
            {
                if (m.Age > 24 &&m.Age < 27) return true;
                return false;
            });
            list1.ForEach(m =>
            {
                Console.WriteLine("listtt " + m.Name + ";" + m.Age);
            });
            Console.ReadLine();
        }
        public class Student : IEqualityComparer<MyClass>
        {
            public bool Equals(MyClass x, MyClass y)
            {
                if (x.Name == y.Name && x.Age == y.Age) return true;//需要根据什么条件进行判断。
                return false;
            }


            public int GetHashCode(MyClass obj)
            {
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return obj.ToString().GetHashCode();
                }
            }
        }  
    }

相关注释已写上;运行结果如下。


如果集合是int型或者string型可直接使用

list1.Intersect(list2);

list1.Except(list2);

list1.Union(list2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值