去除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));

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM