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

一、最近项目中需要对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));

 

猜你喜欢

转载自www.cnblogs.com/weiyi1314/p/11004488.html