List根據某個字段(屬性)去重

2022-02-21 20:30:09 字數 2273 閱讀 7106

更新:2021-06-01

1

void

main()216

double d =datetime.now.subtract(dt).totalmilliseconds;

1718

//方法一

19 datetime dt1 =datetime.now;

20 dictionary result1 = new dictionary();

21foreach (user item in

list)

2228

}29 listr1 =result1.values.tolist();

30double d1 =datetime.now.subtract(dt1).totalmilliseconds;

3132

//方法二

33 datetime dt2 =datetime.now;

34 listresult2 = list.tolookup(item => item.name).todictionary(item => item.key, item =>item.first()).values.tolist();

35double d2 =datetime.now.subtract(dt2).totalmilliseconds;

3637

//方法三

38 datetime dt3 =datetime.now;

39 listresult3 = list.where((x,i)=>list.findindex(z=>z.name == x.name) ==i).tolist();

40double d3 =datetime.now.subtract(dt3).totalmilliseconds;

4142 console.writeline("

生成 " + list.count.tostring("

# ####

") + "

條測試資料耗時:

" + d + "毫秒"

);43 console.writeline("

使用方法一去重耗時:

" + d1 + "毫秒"

);44 console.writeline("

使用方法二去重耗時:

" + d2 + "毫秒"

);45 console.writeline("

使用方法三去重耗時:

" + d3 + "毫秒"

);46 console.writeline("

去重後數量:

" + r1.count + "

," + result2.count + "

," +result3.count);47}

4849

50public

class

user

5153

public

string name

54public

int old

55 }

view code

一千條資料結果:

一萬條資料結果:

十萬條資料結果:

百萬條資料結果:執行時間太長,5分鐘以上了,不等了,取消了

總結:1、資料量越大三種方法耗時差距越明顯

2、方法

一、二各有優缺點,看具體場景

3、方法三不推薦(piapia打臉)

----我是分割線 以下是原文----

有時候自帶的list.distinct()去重並不能滿足魔門的要求,比如以下情況

如果testlist的name相同則視為重複,則可以如下實現,比寫迴圈語句簡潔多了

testlist.where((x,i)=>testlist.findindex(z=>z.name == x.name) == i)
ps:引數x對應最外層的testlist

引數i對應最外層testlist內元素的位置索引(第幾個元素)

引數z對應內層的testlist

LINQ解決根據某個欄位去重

想要list結果重複 的資料很簡單,只要.dinstinct 就好了 但是如果想要根據某個字段去除重複的資料,上面的方法就幫不上忙了,我們需要重寫乙個方法,直接上例子吧 serializable public class homepageusermodel public string titleus...

對list根據某個字段進行排序

今天敲 遇到乙個問題 需要對list的某個字段進行排序,而且需要根據自己定義的順序進行排序 我的需求中根據index實體類的indextype欄位進行排序,順序為 b,d,c,a string 我的indextype欄位為string型別,陣列中為我自定義的順序 用的常量 new fixedorde...

List《實體類》根據多個欄位去重

現在有乙個實體類person,屬性有三個,分別是name,age,address,根據這三個屬性將list中三個欄位都相同的資料進行去重。建立list,新增資料 listlist new arraylist list.add new person tom 15,america list.add ne...