Array#each与Array#map

hash = { "d" => [11, 22], "f" => [33, 44, 55] }


# case 1

hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",")

=> "d:11,d:22,f:33,f:44,f:55"


# case 2

hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",")

=> "11,22,33,44,55"

唯一的区别是案例1使用vs.map,案例2使用vs.each。


这里发生了什么?


FFIVE
浏览 522回答 3
3回答

婷婷同学_

Array#each 对数组的每个元素执行给定的块,然后返回数组本身。Array#map 也为数组的每个元素执行给定的块,但返回一个新数组,其值是该块每次迭代的返回值。示例:假设您已经定义了一个数组:arr = ["tokyo", "london", "rio"]然后尝试执行each:arr.each { |element| element.capitalize }# => ["tokyo", "london", "rio"]注意,返回值只是同一数组。each块中的代码将被执行,但是不会返回计算出的值;并且由于代码没有副作用,因此该示例没有做任何有用的工作。相反,调用数组的map方法将返回一个新数组,其元素是执行该map块的每一轮的返回值:arr.map { |element| element.capitalize }# => ["Tokyo", "London", "Rio"]

慕容708150

以下是有关地图与每个地图的区别的快速演示a = ["a", "b", "c"];#Array.mapp a.map {|item| "map_" + item}#prints ["map_a", "map_b", "map_c"]#Array.eachp a.each {|item| "map_" + item}#prints ["a", "b", "c"]您会看到map返回,["map_a", "map_b", "map_c"]而每个map 只是迭代但返回原始数组:["a", "b", "c"]。因此,每个数组都用于处理数组,而map则用于处理数组。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Ruby