Linq Distinct擴充套件

2022-02-10 18:26:11 字數 1460 閱讀 9619

問題描述:person類有兩個屬性id(int)、name(string)屬性。篩選序列中不重複的person。

public

class person

2:
4:

public

string name

5: }

好吧,看樣子得用distinct方法。不過distinct方法有兩個過載。

public

static ienumerabledistinct(

2:

this ienumerablesource

3: )
4:
5:

public

static ienumerabledistinct(

6:

this ienumerablesource,

7:     iequalitycomparercomparer
8: )

看樣子已經夠用了。不過如果我想只按id唯一,或者按name唯一呢?派生iequalitycomparer倒是可以解決。不過那也忒坑爹了。還是自己試著寫乙個擴充套件吧。

參考封裝的distinct的方法先寫乙個。宣告乙個list,迴圈的時候比較,如果不同就加進去。

public

static ienumerabledistinct(this ienumerablesource, funcselector)

2:
12:         temp.add(item);
13:     }
14:

return temp;

15: }

測試一下,沒什麼問題。不過在函式裡宣告list感覺怪怪的,想辦法換種方式。

2: ,
4:

new person() ,

5:

new person() ,

6:

new person()

7: };
8:
9: var temp = list.distinct(t => t.id);

取指定屬性的唯一序列,在迴圈的時候使用yield返回。

public

static ienumerabledistinct(this ienumerablesource, funcselector)

2:
11: }

測試通過。

用stopwatch分別測試兩個函式迴圈不同次數的時間。對比一下,迴圈次數在10,000次以上時,版本2耗時大概是版本1的1/40,效能差距算是比較大。

目前來說已經夠用了,如果還有其他需求,再根據情況擴充套件吧。

2: list.distinct(t => new ); //根據id及name的值分別比較來取唯一,並非比較引用

linq Distinct的乙個簡單實現方法

linq distinct ienumerable query1 from e in jv group e by new into g select g.tolist 這段 可以得到乙個范型的集合 根據reportid分組後的范型集合 通過foreach能夠取出進行操作。foreach listre...

php uuid 擴充套件,PHP 擴充套件

編譯安裝時候沒有啟用下面擴充套件的,可以單獨安裝 php關鍵性擴充套件安裝 www lanmps 假設 套件 安裝目錄 www lanmps php 7.0.11 假設 php 安裝目錄 1.fileinfo 擴充套件 它應用於檔案處理的改進 進入套件解壓縮後目錄 假設套件目錄為 root lanm...

位擴充套件和字擴充套件

字位擴充套件 儲存資訊一般是儲存在儲存器 rom ram 上的 在實際應用中,經常出現一片rom或ram晶元不能滿足對儲存器容量需求的情況,這就需要用若干片rom或ram組合起來 形成乙個儲存容量更大的儲存器。而組合方式有子擴充套件和位擴充套件兩種。字擴充套件用多片位寬相同的儲存器 rom或ram ...