最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)List<T>去重的多種高效方法

 更新時間:2025年12月10日 09:09:32   作者:凌霜殘雪  
在 C# 開發(fā)中,處理集合數(shù)據(jù)是日常開發(fā)任務(wù)的重要組成部分,有時我們需要對 List<T> 進行去重操作,以確保集合中的元素唯一,本文將介紹幾種實現(xiàn) List<T> 去重的方法,并探討它們的優(yōu)缺點和適用場景,需要的朋友可以參考下

引言

在 C# 開發(fā)中,處理集合數(shù)據(jù)是日常開發(fā)任務(wù)的重要組成部分。有時我們需要對 List<T> 進行去重操作,以確保集合中的元素唯一。本文將介紹幾種實現(xiàn) List<T> 去重的方法,并探討它們的優(yōu)缺點和適用場景。C# 提供了多種方式來完成這項任務(wù),每種方法都有其獨特的優(yōu)勢。接下來,讓我們深入探討這些方法吧!

方法一:使用 HashSet

HashSet<T> 是一個不允許重復(fù)元素的集合類型,它基于哈希表實現(xiàn),因此提供了非??斓牟檎宜俣?。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> listA = new List<int> { 1, 2, 3, 4, 2, 3, 5 };
        
        // 使用 HashSet 去重
        HashSet<int> hashSet = new HashSet<int>(listA);
        List<int> uniqueList = new List<int>(hashSet);

        Console.WriteLine(string.Join(", ", uniqueList)); // 輸出:1, 2, 3, 4, 5
    }
}

優(yōu)點

  • 高效:時間復(fù)雜度為 O(n)。
  • 簡潔:代碼量少,易于理解。

方法二:LINQ 的 Distinct 方法

如果你已經(jīng)習(xí)慣了 LINQ 的強大功能,那么 Distinct() 方法無疑是你的首選。它可以直接應(yīng)用于任何實現(xiàn)了 IEnumerable<T> 接口的集合。

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        List<int> listA = new List<int> { 1, 2, 3, 4, 2, 3, 5 };

        // 使用 LINQ 的 Distinct 方法去重
        List<int> uniqueList = listA.Distinct().ToList();

        Console.WriteLine(string.Join(", ", uniqueList)); // 輸出:1, 2, 3, 4, 5
    }
}

優(yōu)點

  • 鏈?zhǔn)秸{(diào)用友好:可以與其他 LINQ 操作無縫集成。
  • 簡單直觀:一行代碼即可完成去重。

方法三:手動去重(循環(huán) + 判斷)

對于那些希望完全控制去重邏輯的開發(fā)者來說,手動遍歷并判斷是否已存在當(dāng)前元素是一種傳統(tǒng)但有效的手段。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> listA = new List<int> { 1, 2, 3, 4, 2, 3, 5 };
        List<int> uniqueList = new List<int>();

        foreach (int item in listA)
        {
            if (!uniqueList.Contains(item))
            {
                uniqueList.Add(item);
            }
        }

        Console.WriteLine(string.Join(", ", uniqueList)); // 輸出:1, 2, 3, 4, 5
    }
}

優(yōu)點

  • 靈活:可以根據(jù)需求調(diào)整去重邏輯。
  • 不依賴外部工具:完全手寫邏輯,適合學(xué)習(xí)基礎(chǔ)。

缺點

  • 性能較差:尤其是當(dāng)列表較大時,Contains 的時間復(fù)雜度為 O(n),整體效率較低。

方法四:使用 Dictionary 或 Lookup

Dictionary<K,V>Lookup<K,V> 也可以用來去重,因為它們的鍵是唯一的。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> listA = new List<int> { 1, 2, 3, 4, 2, 3, 5 };

        // 使用 Dictionary 去重
        Dictionary<int, bool> dict = new Dictionary<int, bool>();
        foreach (int item in listA)
        {
            if (!dict.ContainsKey(item))
            {
                dict[item] = true;
            }
        }

        List<int> uniqueList = new List<int>(dict.Keys);

        Console.WriteLine(string.Join(", ", uniqueList)); // 輸出:1, 2, 3, 4, 5
    }
}

優(yōu)點

  • 性能較好:查找速度快,適用于大數(shù)據(jù)集。
  • 鍵值結(jié)構(gòu)靈活:適合擴展。

方法五:排序后去重

如果允許改變原始列表順序,可以通過排序后移除相鄰重復(fù)項來去重。

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<int> listA = new List<int> { 1, 2, 3, 4, 2, 3, 5 };

        // 排序后去重
        listA.Sort();
        List<int> uniqueList = new List<int> { listA[0] };

        for (int i = 1; i < listA.Count; i++)
        {
            if (listA[i] != listA[i - 1])
            {
                uniqueList.Add(listA[i]);
            }
        }

        Console.WriteLine(string.Join(", ", uniqueList)); // 輸出:1, 2, 3, 4, 5
    }
}

優(yōu)點

  • 適合排序場景:先排序再去除重復(fù)項。
  • 邏輯簡單:直接比較相鄰元素。

缺點

  • 會改變原始順序:不適合對順序敏感的情況。

結(jié)語

選擇哪種去重方法取決于具體的應(yīng)用場景和個人偏好。無論你是追求極致性能還是代碼簡潔性,總有一種方法能滿足你的需求。希望這篇文章能幫助你更好地理解和應(yīng)用 C# 中的 List<T> 去重技術(shù)!

通過這篇博客文章,不僅可以讓讀者了解到不同的去重方法,還能幫助他們在實際工作中根據(jù)具體情況選擇最合適的解決方案。

以上就是C#實現(xiàn)List<T>去重的多種高效方法的詳細(xì)內(nèi)容,更多關(guān)于C# List<T>去重的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#實現(xiàn)多線程寫入同一個文件的方法

    C#實現(xiàn)多線程寫入同一個文件的方法

    這篇文章主要介紹了C#實現(xiàn)多線程寫入同一個文件的方法,涉及C#多線程操作文件讀寫的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 使用C#實現(xiàn)簡單的線性回歸的代碼詳解

    使用C#實現(xiàn)簡單的線性回歸的代碼詳解

    最近注意到了NumSharp,想學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是去實踐,因此從github上找了一個用python實現(xiàn)的簡單線性回歸代碼,然后基于NumSharp用C#進行了改寫,需要的朋友可以參考下
    2024-01-01
  • c# 重載WndProc,實現(xiàn)重寫“最小化”的實現(xiàn)方法

    c# 重載WndProc,實現(xiàn)重寫“最小化”的實現(xiàn)方法

    在做“亦歌桌面版”的時候,發(fā)現(xiàn)當(dāng)打開歌詞狀態(tài)下,用最小化隱藏窗體到托盤的話(如下code #1),在調(diào)出發(fā)現(xiàn)歌詞縮小了(雖然顯現(xiàn)的窗體大小跟剛才一樣),從這點看調(diào)用該方法其實窗體大小是改變了的(這個過程只是不可視而已)。
    2009-02-02
  • C#中的LINQ簡化數(shù)據(jù)查詢與操作用法詳解

    C#中的LINQ簡化數(shù)據(jù)查詢與操作用法詳解

    LINQ(Language Integrated Query)是C#中用于處理和操作數(shù)據(jù)的強大工具,它允許開發(fā)者以聲明式的方式編寫查詢,適用于多種數(shù)據(jù)源,本文介紹C#中的LINQ簡化數(shù)據(jù)查詢與操作用法,感興趣的朋友一起看看吧
    2025-11-11
  • C#實現(xiàn)Access通用訪問類OleDbHelper完整實例

    C#實現(xiàn)Access通用訪問類OleDbHelper完整實例

    這篇文章主要介紹了C#實現(xiàn)Access通用訪問類OleDbHelper,結(jié)合完整實例形式分析了C#針對access數(shù)據(jù)庫的連接、查詢、遍歷、分頁顯示等相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • C#實現(xiàn)子類與父類的相互轉(zhuǎn)換

    C#實現(xiàn)子類與父類的相互轉(zhuǎn)換

    這篇文章主要介紹了C#實現(xiàn)子類與父類的相互轉(zhuǎn)換,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • WPF中使用CallerMemberName簡化InotifyPropertyChanged的實現(xiàn)

    WPF中使用CallerMemberName簡化InotifyPropertyChanged的實現(xiàn)

    這篇文章介紹了WPF中使用CallerMemberName簡化InotifyPropertyChanged的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)的中國移動官網(wǎng)手機號碼采集器

    C#實現(xiàn)的中國移動官網(wǎng)手機號碼采集器

    這篇文章主要介紹了C#實現(xiàn)的中國移動官網(wǎng)手機號碼采集器,本文先是采集號碼入庫,同時給出了篩選各類靚號的SQL語句,需要的朋友可以參考下
    2014-10-10
  • C# 抓圖服務(wù)的實現(xiàn)

    C# 抓圖服務(wù)的實現(xiàn)

    這篇文章主要介紹了C# 抓圖服務(wù)的實現(xiàn),幫助大家更好的利用c#處理窗口,進行截圖,感興趣的朋友可以了解下
    2021-01-01
  • C#解析json文件的實現(xiàn)代碼

    C#解析json文件的實現(xiàn)代碼

    最近需要用c#解析json文件,以前沒用過這個,百度了一下找到了這篇文章感覺不錯,特分享下
    2013-06-06

最新評論

黎城县| 东台市| 固镇县| 滨海县| 司法| 西安市| 民县| 大厂| 茶陵县| 甘孜| 太原市| 北碚区| 柳河县| 江都市| 宁津县| 眉山市| 临泉县| 临漳县| 香河县| 武清区| 鹿泉市| 清涧县| 崇州市| 卢湾区| 亚东县| 衡阳县| 黄骅市| 伊宁市| 通州区| 济源市| 浑源县| 温宿县| 白河县| 柞水县| 商都县| 林州市| 阜新市| 巢湖市| 德安县| 陕西省| 抚松县|