http://blog.csdn.net/qq_23846795/article/details/77092670
http://blog.csdn.net/qq_23846795/article/details/78392758
List 去重
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; namespace NonDuplicateList { class Program { static void Main(string[] args) { List<User> users = new List<User>(); users.Add(new User("张三", "永丰路299号")); users.Add(new User("张三", "上地西路8号"));//重复项,去重后将删掉 users.Add(new User("李四", "海鹰路甲一号")); List<User> nonDuplicateList1 = users.Distinct().ToList();//通过User类的Equals实现去重 List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList();//Lambda表达式去重 List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重 foreach(User user in users) { if(nonDuplicateList3.Exists(x=>x.name==user.name) == false) { nonDuplicateList3.Add(user); } } foreach(List<User> list in new Object[]{nonDuplicateList1,nonDuplicateList2,nonDuplicateList3})//打印出三个List的元素 { Console.Write("nonDuplicateList: "); foreach(User u in list) { Console.WriteLine(" " + u.ToString()); } } Console.Read(); } } class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重 { public string name { get; set; } string address; public User(string _name, string _address) { name = _name; address = _address; } public override string ToString() { return string.Format("name:{0}, address:{1}", name, address); } public bool Equals(User other) { return this.name == other.name; } public override int GetHashCode() { return name.GetHashCode(); } } }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication11 7 { 8 class MapCross : IEquatable<MapCross>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重 9 { 10 public int Id { get; set; } 11 12 public string Name { get; set; } 13 14 public override string ToString() 15 { 16 return "ID: " + Id + " Name: " + Name; 17 } 18 public bool Equals(MapCross other) 19 { 20 return this.Name == other.Name; 21 } 22 public override int GetHashCode() 23 { 24 return Name.GetHashCode(); 25 } 26 } 27 28 class Program 29 { 30 static void Main(string[] args) 31 { 32 List<MapCross> list = new List<MapCross>(); 33 //添加 34 list.Add(new MapCross { Id = 1, Name = "A" }); 35 list.Add(new MapCross { Id = 2, Name = "B" }); 36 list.Add(new MapCross { Id = 2, Name = "B" }); 37 list.Add(new MapCross { Id = 3, Name = "C" }); 38 list.Add(new MapCross { Id = 3, Name = "C" }); 39 list.Add(new MapCross { Id = 4, Name = "D" }); 40 //分组 41 var query1 = from l in list 42 group l by new { l.Id, l.Name } into g 43 select new 44 { 45 Id = g.Select(o => o.Id).Sum(), 46 Name = g.Key.Name, 47 Count = g.Count(), 48 }; 49 //赋值 50 foreach (var item in query1) 51 { 52 MapCross cross = new MapCross(); 53 cross.Id = item.Id; 54 cross.Name = item.Name; 55 list.Add(cross); 56 } 57 // 查询 赋值 58 var newlist = (from a in list 59 where a.Name == "C" 60 select a).ToList(); 61 foreach (var item in newlist) 62 { 63 Console.WriteLine(item); 64 } 65 Console.WriteLine(); 66 //相加 67 list.AddRange(newlist); 68 Console.WriteLine("相加"); 69 foreach (var item in list) 70 { 71 Console.WriteLine(item); 72 } 73 Console.WriteLine("剔除重复项"); 74 var list1= list.Union(list).ToList(); //剔除重复项 75 foreach (var item in list1) 76 { 77 Console.WriteLine(item); 78 } 79 Console.WriteLine("保留重复项"); 80 var list2 = list.Concat(newlist).ToList(); //保留重复项 81 foreach (var item in list2) 82 { 83 Console.WriteLine(item); 84 } 85 Console.WriteLine("自身去重复 方法一"); 86 var list3=list.Distinct().ToList(); 87 foreach (var item in list3) 88 { 89 Console.WriteLine(item); 90 } 91 Console.WriteLine("自身去重复 方法二"); 92 //Lambda表达式去重 93 var list4 = list.Where((x, i) => list.FindIndex(z => z.Name == x.Name) == i).ToList(); 94 foreach (var item in list4) 95 { 96 Console.WriteLine(item); 97 } 98 Console.WriteLine("自身去重复 方法三"); 99 var list5 = new List<MapCross>();//通过循环方式去重 100 foreach (var u in list) 101 { 102 if (list5.Exists(x => x.Name == u.Name) == false) 103 { 104 list5.Add(u); 105 } 106 } 107 foreach (var item in list5) 108 { 109 Console.WriteLine(item); 110 } 111 Console.WriteLine("修改"); 112 //修改 113 foreach (var item in list) 114 { 115 if (item.Name == "B") 116 item.Name = "BB"; 117 } 118 //倒序for 才能删除 119 for (int i = list.Count - 1; i >= 0; i--) 120 { 121 if (list[i].Name == "C") 122 list.Remove(list[i]); 123 } 124 //排序 125 foreach (var item in list.OrderBy(s=>s.Name)) 126 { 127 Console.WriteLine(item); 128 } 129 //复制 130 //相减 131 //关联 132 133 Console.Read(); 134 } 135 } 136 }