我有以下内容:
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!
。
答案 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