更新:2021-06-01
1view codevoid
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 }
一千條資料結果:
一萬條資料結果:
十萬條資料結果:
百萬條資料結果:執行時間太長,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...