第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較兩個通用列表差異的最快方法

比較兩個通用列表差異的最快方法

C#
幕布斯6054654 2019-10-06 15:04:01
比較兩個大型項目(> 50.000個項目)最快(且最不占用資源)是什么,因此有兩個列表如下:顯示在第一個列表中但不在第二個列表中的項目出現(xiàn)在第二個列表中但不在第一個列表中的項目目前,我正在使用List或IReadOnlyCollection,并在linq查詢中解決此問題:var list1 = list.Where(i => !list2.Contains(i)).ToList();var list2 = list2.Where(i => !list.Contains(i)).ToList();但這并沒有我想要的那樣好。有什么想法可以讓我更快地,減少資源消耗,因為我需要處理很多列表?
查看完整描述

3 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊

用途Except:


var firstNotSecond = list1.Except(list2).ToList();

var secondNotFirst = list2.Except(list1).ToList();

我懷疑有這實際上是略高于這個速度的方法,但即使這樣會大大超過你的O(N * M)的方法要快。


如果要組合使用這些方法,可以使用上面的方法創(chuàng)建一個方法,然后再使用return語句:


return !firstNotSecond.Any() && !secondNotFirst.Any();

要注意的一點(diǎn)是,有是在問題的原代碼和這里的解決方案之間的結(jié)果有所不同:任何重復(fù)的元素,其僅在一個列表將只與我的代碼報告一次,而他們會被報告為多原始代碼中出現(xiàn)的次數(shù)。


例如,清單[1, 2, 2, 2, 3]和[1],在“列表1中的元素,但不是列表2”導(dǎo)致原始代碼將是[2, 2, 2, 3]。用我的代碼就可以了[2, 3]。在許多情況下,這不是問題,但是值得一提。


查看完整回答
反對 回復(fù) 2019-10-06
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗 獲得超6個贊

更有效的方法是使用Enumerable.Except:


var inListButNotInList2 = list.Except(list2);

var inList2ButNotInList = list2.Except(list);

通過使用延遲執(zhí)行來實現(xiàn)此方法。這意味著您可以編寫例如:


var first10 = inListButNotInList2.Take(10);

由于它內(nèi)部使用a Set<T>比較對象,因此它也是有效的。它的工作方式是首先從第二個序列中收集所有不同的值,然后流式傳輸?shù)谝粋€序列的結(jié)果,并檢查它們以前沒有被看到過。


查看完整回答
反對 回復(fù) 2019-10-06
  • 3 回答
  • 0 關(guān)注
  • 632 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號