2014-03-24 37 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