2014-03-24 72 views
17

我有一個遞歸函數,它創建表示文件路徑的對象(關鍵字是路徑,值是關於文件的信息)。它是遞歸的,因爲它只是用來處理文件,所以如果遇到一個目錄,就會在目錄上遞歸地調用該函數。獲取兩個地圖的結合

就這麼說,我想在兩個地圖上做一個set union的等價物(即使用遞歸調用的值更新「main」地圖)。除了遍歷一個映射並將每個鍵和值分配給另一個映射中的相同內容之外,有沒有一種慣用的方法可以做到這一點?

即:給予a,bmap [string] *SomeObject型,並最終填充ab,有沒有什麼辦法來更新ab所有的值?

+1

也許你可以利用一組實際容器,用於這方面的工作:http://github.com/deckarep/golang-set –

+0

拉爾夫的建議是好的爲集合。但是,我想說,在你的情況下,它不是一個* union *,而是一個* merge *;一個集合應該只是一個「鍵」的集合,而您有兩個鍵值對的集合,其中一個「集合」應該優先於另一個集合。 – ANisus

回答

33

沒有內置的方法,也沒有任何標準包中的方法來做這樣的合併。

的idomatic方法是簡單地重複:

for k, v := range b { 
    a[k] = v 
} 
+1

要添加到ANisus回答:地圖本質上是哈希表。有可能沒有任何方法可以快速地計算兩個地圖的並集,而不僅僅是對兩個地圖進行迭代。 – fuz

+0

您可以使用反射來編寫類型不可知的聯合函數,但它會更慢。 – Evan

+0

在將v賦值給[k]之前,不應該將UNION代碼中的[k]和v的值代碼UNION?如果[k]和v是數組或地圖會怎麼樣? – vdolez