去除List集合中的重复值、去除数组的重复值

it2026-09-30  9

一、最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用遍历list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 

但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所以我又想着能不能用set的特性进行去重又不打乱顺序呢? 试了一下,也是可以的,几种方法在不同情况下都有各自的优势。现在将代码写出来,比较一下。

 

 二、数组去重,和上述list去重类似

 

List<string> li1 = new List<string> { "8", "8", "9", "9" ,"0","9"}; List<string> li2 = new List<string> { "张三", "张三", "李四", "张三", "王五", "李四" }; List<string> li3 = new List<string> { "A", "A", "C", "A", "C", "D" }; List<string> li4 = new List<string> { "12", "18", "19", "19", "10", "19" };方法一、 HashSet<string> hs = new HashSet<string>(li1); //此时已经去掉重复的数据保存在hashset中方法二、 for (int i = 0; i < li2.Count; i++) //外循环是循环的次数 { for (int j = li2.Count - 1 ; j > i; j--) //内循环是 外循环一次比较的次数 { if (li2[i] == li2[j]) { li2.RemoveAt(j); } } }方法三、   //把相同的用null代替。 for (int i = 0; i < li3.Count; i++) { for (int j = 0; j < li3.Count; j++) { if (i == j) continue; if (li3[i] == li3[j]) { li3[j] = "null"; } } }方法四、 //这方法跟上面的一样,只是变了逻辑 for (int i = 0; i < li4.Count - 1; i++) { for (int j = 0; j < li4.Count ; j++) { if (i != j) { if (li4[i] == li4[j]) { li4[j] = "null"; } } } }输出结果: Console.WriteLine("li1去除重复后的值为"); hs.ToList().ForEach(item => Console.WriteLine(item)); Console.WriteLine("li2去除重复后的值为"); li2.ForEach(item => Console.WriteLine(item)); Console.WriteLine("li3去除重复后的值为"); li3.ForEach(item => Console.WriteLine(item)); Console.WriteLine("li4去除重复后的值为"); li4.ForEach(item => Console.WriteLine(item));

 

 

转载于:https://www.cnblogs.com/weiyi1314/p/11004488.html

最新回复(0)