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小时内删除。
发表评论