在C 中合併字典

2021-10-02 05:38:30 字數 1676 閱讀 8732

在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 上面方法看似沒什麼毛病,但是這裡會存在乙個問題,...