在c#中合併2個或更多詞典(dictionary
)的最佳方法是什麼? (像linq這樣的3.0功能很好)。
我正在考慮以下方法簽名:
public
static dictionary
merge
<
tkey
,tvalue
>
(dictionary
dictionaries)
;
要麼
public
static dictionary
merge
<
tkey
,tvalue
>
(ienumerable
> dictionaries)
;
這部分取決於您遇到重複時要發生的情況。 例如,您可以執行以下操作:
var result = dictionaries.
selectmany
(dict =
> dict)
.todictionary
(pair =
> pair.key, pair =
> pair.value)
;
如果您有任何重複的金鑰,那將會炸毀。
var result = dictionaries.
selectmany
(dict =
> dict)
.tolookup
(pair =
> pair.key, pair =
> pair.value)
.todictionary
(group
=>
group
.key,
group
=>
group
.first()
);
這有點難看-而且效率低下-但就**而言,這是最快的方法。 (坦率地說,我還沒有測試過。)
您當然可以編寫自己的todictionary2擴充套件方法(使用乙個更好的名稱,但是我現在沒有時間考慮)-這樣做並不是很難,只需覆蓋(或忽略)重複的鍵即可。 (在我看來)重要的一點是使用selectmany,並意識到字典支援在其鍵/值對上進行迭代。
我會這樣做:
dictionaryfrom.
tolist()
.foreach
(x =
> dictionaryto.
add(x.key, x.value)
);
簡單容易。 根據此部落格文章 ,由於其底層實現通過索引而不是列舉器訪問元素,因此它比大多數迴圈還要快(請參閱此答案) 。
如果有重複項,它當然會引發異常,因此您必須在合併之前進行檢查。
如果有多個鍵(「右」鍵代替「左」鍵),則不會**,可以合併多個詞典(如果需要)並保留型別(但需要乙個有意義的預設公共建構函式的限制):
public
static
class
dictionaryextensions).
concat
(others))}
return newmap;
}}
C 字典Dictionary在unity中使用案例
c 字典在unity中使用案例 1 前言 講起c dictionary,許多人聞之色變,不了解,不清楚,即使知道,了解,也不一定會用,鑑於此,本人特地總結了乙個使用字典的案例。2 什麼是字典。必須包含名空間system.collection.generic dictionary裡面的每乙個元素都是乙...
python中實現字典的合併
1 使用內建函式update合併 dict1 dict a 100,b 200,c 300 字典1 dict1 dict2 dict d 400,e 500,f 600 字典2 dict2 dict1.update dict2 利用update函式合併 dict1 dict1 dict a 100,...
如何判斷字典a在字典b中
todo set的issubset方法,a.issubset b 判斷集合a的所有元素是否包含在集合b中 a b aa set a.items print aa bb set b.items print bb print aa.issubset bb 上面方法看似沒什麼毛病,但是這裡會存在乙個問題,...