ruby.地图!或每个用于就地修改数组
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
。
另外我想我想知道主要区别是什么,因为它们都可以用于副作用。
我添加这个作为额外的参考信息,我使用的是 ruby 1.8.7,所以很高兴知道版本 (1.8.7 - 1.9+) 之间的区别。
P.s。我知道 .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
或者,如果您不关心 "functional" 您的代码如何,您可以使用 #each
:
article_results.each do |key, value|
article_results[key].merge!(filename: c.filename,
sitename: c.sitename)
end
我有以下内容:
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
。
另外我想我想知道主要区别是什么,因为它们都可以用于副作用。
我添加这个作为额外的参考信息,我使用的是 ruby 1.8.7,所以很高兴知道版本 (1.8.7 - 1.9+) 之间的区别。
P.s。我知道 .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
或者,如果您不关心 "functional" 您的代码如何,您可以使用 #each
:
article_results.each do |key, value|
article_results[key].merge!(filename: c.filename,
sitename: c.sitename)
end