狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

簡(jiǎn)介


本文主要講解C# List的Contains,Exists,Any,Where性能對(duì)比問(wèn)題,通過(guò)對(duì)比測(cè)試實(shí)際運(yùn)行時(shí)間來(lái)研究它們之間的優(yōu)劣性。


正文

在實(shí)際的開(kāi)發(fā)中,我們經(jīng)常會(huì)需要在一個(gè)List中查找指定的元素。而C#中提供了多種查找方法,下面我們來(lái)看一下它們之間的性能對(duì)比。

1、Contains方法

Contains方法的作用是檢查L(zhǎng)ist中是否包含指定元素,其代碼實(shí)現(xiàn)如下:

public bool Contains(T item);

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

我們可以通過(guò)如下方式來(lái)使用該方法:

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

通過(guò)控制臺(tái)測(cè)試發(fā)現(xiàn),Contains方法的執(zhí)行時(shí)間非常短,一般在1毫秒以下。因?yàn)樵摲椒ㄊ褂昧硕植檎宜惴ǎ诖蠖鄶?shù)情況下,找到指定元素只需要遍歷集合的一半即可,所以執(zhí)行速度非常快。

2、Exists方法

Exists方法是一個(gè)實(shí)例方法,可以使用委托作為它的參數(shù)來(lái)查找元素,其代碼實(shí)現(xiàn)如下:

public bool Exists(Predicate<T> match);

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

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

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

由于Exists方法的參數(shù)是一個(gè)委托,所以其執(zhí)行時(shí)間比Contains方法要長(zhǎng)。但是,當(dāng)集合中元素比較多且查找條件復(fù)雜時(shí),Exists方法的執(zhí)行時(shí)間可能比Contains方法更短。

3、Any方法

Any方法用于判斷集合中是否存在滿(mǎn)足指定條件的元素,其代碼實(shí)現(xiàn)如下:

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

其中,predicate為一個(gè)返回bool類(lèi)型的函數(shù),表示用來(lái)判斷元素是否符合檢索條件的方法。

使用方法如下:

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

我們可以通過(guò)控制臺(tái)測(cè)試發(fā)現(xiàn),Any方法的執(zhí)行時(shí)間與Exists方法相當(dāng),因?yàn)樗鼈儍蓚€(gè)的代碼實(shí)現(xiàn)方式都是一樣的。

4、Where方法

Where方法用于篩選符合指定條件的元素,其代碼實(shí)現(xiàn)如下:

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方法的返回值是一個(gè)IEnumerable,因?yàn)樗皇呛Y選符合指定條件的元素,而并沒(méi)有直接返回元素本身。由于Where方法是延遲求值的,所以需要使用foreach等方式來(lái)獲取其返回值。

由于Where方法返回的是延遲求值的IEnumerable,其執(zhí)行時(shí)間比其他方法要長(zhǎng)一些。但是,如果需要對(duì)集合進(jìn)行復(fù)雜的篩選操作時(shí),Where方法是一個(gè)非常好用的API。

示例說(shuō)明

1、簡(jiǎn)單查找

我們創(chuàng)建一個(gè)包含100萬(wàn)個(gè)元素的List集合,并分別使用Contains、Exists和Any方法來(lái)查找元素1的位置。執(zhí)行100次,每個(gè)方法的總執(zhí)行時(shí)間都會(huì)被記錄下來(lái),并進(jìn)行平均計(jì)算,得到如下測(cè)試結(jié)果:

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

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

2、復(fù)雜查找

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

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

從上面的測(cè)試結(jié)果可以看到,使用委托和Exists方法組合的方式比使用Where方法要快2倍以上。這是因?yàn)閃here方法需要對(duì)集合進(jìn)行篩選操作,并使用迭代器進(jìn)行返回結(jié)果。而Exists方法只需要通過(guò)委托來(lái)判斷元素是否滿(mǎn)足條件,查找速度比Where方法要快。

結(jié)論

針對(duì)不同的情況,我們需要選擇不同的Method。如果集合的元素?cái)?shù)量較小,Contains方法是最好的選擇,因?yàn)樗鼒?zhí)行效率最高。

對(duì)于復(fù)雜的查找需求,例如需要比較多個(gè)屬性或進(jìn)行多重查找,Exists方法可能比Contains更快,但比Where慢。

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

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

本文詳細(xì)講解了C# List的Contains,Exists,Any,Where性能對(duì)比問(wèn)題,并給出了示例說(shuō)明。希望能對(duì)讀者在實(shí)際開(kāi)發(fā)中有所幫助。

轉(zhuǎn)自:Python技術(shù)站

鏈接:pythonjishu.com/phazijjgrwhiull


該文章在 2024/3/19 10:22:54 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved