hash = { "d" => [11, 22], "f" => [33, 44, 55] }
hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",") => "d:11,d:22,f:33,f:44,f:55"
hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",") => "11,22,33,44,55" 唯一的区别是案例1使用vs.map,案例2使用vs.each。
这里发生了什么? 问题来源于stack overflow
Array#each 为数组的每个元素执行给定的块,然后返回数组本身。
Array#map 也为数组的每个元素执行给定的块,但返回一个新数组,其值是该块每次迭代的返回值。
示例:假设您已经定义了一个数组:
arr = ["tokyo", "london", "rio"] 然后尝试执行each:
arr.each { |element| element.capitalize }
注意,返回值就是同一数组。each块内的代码被执行,但是不返回计算出的值;并且由于代码没有副作用,因此该示例没有做任何有用的工作。
相反,调用数组的map方法将返回一个新数组,其元素是执行该map块的每一轮的返回值:
arr.map { |element| element.capitalize }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。