簡體   English   中英

ruby .map! 或者每個用於修改陣列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM