C#List去重的三种⽅法(转)
三种去重的⽅法
1、List中的元素实现IEquatabe接⼝,并提供Equals⽅法和GetHashCode⽅法。
2、使⽤表达式
[csharp]
1. users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i)
去重,这条语句返回结果只保留users这个List中重复的元素的第⼀个(name相等认为重复)。
3、使⽤循环,判断每个元素是否重复
[csharp]
1. using System;
2. using System.Collections.Generic;
3. using System.Linq;
4.
5. namespace NonDuplicateList
6. {
7.    class Program
8.    {
9.        static void Main(string[] args)
10.        {
11.            List<User> users = new List<User>();
12.            users.Add(new User("张三", "永丰路299号"));
13.            users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉
14.            users.Add(new User("李四", "海鹰路甲⼀号"));
15.
16.            List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重
17.            List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去
18.            List<User> nonDuplicateList3 = new List<User>();//通过循环⽅式去重
19.            foreach(User user in users)
20.            {
21.                if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)
22.                {
23.                    nonDuplicateList3.Add(user);
24.                }
25.            }
26.
27.            foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素
28.            {
29.                Console.Write("nonDuplicateList:\r\n");
30.                foreach(User u in list)
31.                {
32.                    Console.WriteLine("\t" + u.ToString());
33.                }
34.            }
35.            Console.Read();
36.        }
37.    }
38.
39.    class User:IEquatable<User>//继承IEquatable接⼝,实现Equals⽅法。List就可以使⽤Distinct去重
40.    {
41.        public string name { get; set; }
42.        string address;
43.
44.        public User(string _name, string _address)
45.        {
46.            name = _name;
47.            address = _address;
48.        }
49.
50.        public override string ToString()
51.        {
52.            return string.Format("name:{0},\taddress:{1}", name, address);
53.        }
54.
55.        public bool Equals(User other)
56.        {
57.            return this.name == other.name;
58.        }
59.        public override int GetHashCode()
60.        {
61.            return name.GetHashCode();
62.        }
63.    }
64. }
equals()方法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。