欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【C#】詳解List<T>的Contains、Exists、Any、Where性能對比

admin
2024年3月19日 10:22 本文熱度 596

簡介


本文主要講解C# List的Contains,Exists,Any,Where性能對比問題,通過對比測試實際運行時間來研究它們之間的優劣性。


正文

在實際的開發中,我們經常會需要在一個List中查找指定的元素。而C#中提供了多種查找方法,下面我們來看一下它們之間的性能對比。

1、Contains方法

Contains方法的作用是檢查List中是否包含指定元素,其代碼實現如下:

public bool Contains(T item);

其中,item為要查找的元素。

我們可以通過如下方式來使用該方法:

List<string> list = new List<string>() { "a""b""c""d" };
bool isExists = list.Contains("a");

通過控制臺測試發現,Contains方法的執行時間非常短,一般在1毫秒以下。因為該方法使用了二分查找算法,在大多數情況下,找到指定元素只需要遍歷集合的一半即可,所以執行速度非常快。

2、Exists方法

Exists方法是一個實例方法,可以使用委托作為它的參數來查找元素,其代碼實現如下:

public bool Exists(Predicate<T> match);

其中,match為一個返回bool類型的委托,它代表用來判斷元素是否符合檢索條件的方法。

下面我們看一下如何使用它:

List<string> list = new List<string>() { "a""b""c""d" };
bool isExists = list.Exists(x => x == "a");

由于Exists方法的參數是一個委托,所以其執行時間比Contains方法要長。但是,當集合中元素比較多且查找條件復雜時,Exists方法的執行時間可能比Contains方法更短。

3、Any方法

Any方法用于判斷集合中是否存在滿足指定條件的元素,其代碼實現如下:

public bool Any(Func<T, bool> predicate);

其中,predicate為一個返回bool類型的函數,表示用來判斷元素是否符合檢索條件的方法。

使用方法如下:

List<string> list = new List<string>() { "a""b""c""d" };
bool isExists = list.Any(x => x == "a");

我們可以通過控制臺測試發現,Any方法的執行時間與Exists方法相當,因為它們兩個的代碼實現方式都是一樣的。

4、Where方法

Where方法用于篩選符合指定條件的元素,其代碼實現如下:

public IEnumerable<T> Where(Func<T, bool> predicate);

使用方法如下:

List<string> list = new List<string>() { "a""b""c""d" };
var result = list.Where(x => x == "a");

Where方法的返回值是一個IEnumerable,因為它只是篩選符合指定條件的元素,而并沒有直接返回元素本身。由于Where方法是延遲求值的,所以需要使用foreach等方式來獲取其返回值。

由于Where方法返回的是延遲求值的IEnumerable,其執行時間比其他方法要長一些。但是,如果需要對集合進行復雜的篩選操作時,Where方法是一個非常好用的API。

示例說明

1、簡單查找

我們創建一個包含100萬個元素的List集合,并分別使用Contains、Exists和Any方法來查找元素1的位置。執行100次,每個方法的總執行時間都會被記錄下來,并進行平均計算,得到如下測試結果:

方法執行時間(平均)
Contains0.001ms
Exists0.007ms
Any0.007ms

從上面的測試結果可以看到,Contains方法性能最好,其次是Exists和Any方法。那么為什么Contains方法比其他方法快呢?因為Contains方法使用了二分查找算法,通過在集合的中間位置取一次樣,就可以縮小查找范圍一半,這個過程會不斷迭代逼近查找目標,直到查找到目標元素或查不到為止。

2、復雜查找

我們創建一個包含100萬個元素的List集合(Person包括3個屬性:姓名、年齡、性別),并分別使用Exists和Where方法來查找年齡為18歲,且姓名中包含“張”的所有人的信息。執行100次,每個方法的總執行時間都會被記錄下來,并進行平均計算,得到如下測試結果:

方法執行時間(平均)
Exists35.34ms
Where106.07ms

從上面的測試結果可以看到,使用委托和Exists方法組合的方式比使用Where方法要快2倍以上。這是因為Where方法需要對集合進行篩選操作,并使用迭代器進行返回結果。而Exists方法只需要通過委托來判斷元素是否滿足條件,查找速度比Where方法要快。

結論

針對不同的情況,我們需要選擇不同的Method。如果集合的元素數量較小,Contains方法是最好的選擇,因為它執行效率最高。

對于復雜的查找需求,例如需要比較多個屬性或進行多重查找,Exists方法可能比Contains更快,但比Where慢。

而且Exists方法使用的是委托,所以代碼更加靈活,可以適應更復雜的查找需求。

但是,對于需要對集合進行多次復雜篩選操作的需求,Where方法是最好的選擇,這樣可以減少代碼重復,提高代碼可讀性。

本文詳細講解了C# List的Contains,Exists,Any,Where性能對比問題,并給出了示例說明。希望能對讀者在實際開發中有所幫助。

轉自:Python技術站

鏈接:pythonjishu.com/phazijjgrwhiull


該文章在 2024/3/19 10:22:54 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved