ruby .map!或者每个用于修改阵列

时间:2016-07-28 10:21:39

标签: arrays ruby each ruby-2.0 ruby-1.8.7

我有以下内容:

article_results.keys do |key|
  article_results[key].map! do |a|
    a[:filename] = c.filename
    a[:sitename] = c.site_name
    a
  end
end

因为我想动态地添加到散列中每个数组的每个元素,但由于某些原因a[:filename]a[:sitename]在使用时是空白的。

所以我想知道我是否应该使用.each。 此外,我想我想知道主要区别是什么,因为它们都可以用于副作用。

我将此添加为额外的fyi,我使用的是ruby 1.8.7,所以很高兴知道版本之间的差异(1.8.7 - 1.9+)。

P.S。我知道.each.map之间的区别是什么,我具体询问.map!

1 个答案:

答案 0 :(得分:0)

#map对于哈希的语义与对数组的语义有所不同(我认为它在ruby版本之间不是很一致)。一般来说,如果你正在寻找某个操作的数组 - #map是你的朋友,但是如果你想通过某些操作得到哈希 - 你最好用#reduce:< / p>

article_results.reduce({}) do |hash, (key, value)|
  hash.merge(key => value.merge(filename: c.filename,
                                sitename: c.sitename))
end

或者,如果您不关心代码的“功能”,可以使用#each

article_results.each do |key, value|
  article_results[key].merge!(filename: c.filename,
                              sitename: c.sitename)
end