[英]ruby .map! or each for modifying an array in place
我有以下內容:
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+)也是如此。
我知道.each
和.map
之間的區別是什么,我是專門詢問.map!
。
#map
對於哈希的語義與對陣列的語義有所不同(我認為它在ruby版本之間不是很一致)。 一般來說,如果你正在尋找某個操作的數組 - #map
是你的朋友,但是如果你想通過某些操作得到哈希 - 你最好用#reduce
:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.