地图与每个之间的差异

可能重复:
Ruby – map,each和collect之间有什么区别?

我也看过Ruby-Doc,但我无法理解它们之间的区别

map each 

迭代器。如果你能给出一个例子并解释,那将会很棒。

each只是迭代给定的枚举,为每个值运行块。 它会丢弃块的返回值,并且每个都返回它调用的原始对象:

 [1, 2, 3].each do |i| i + 1 end # => [1, 2, 3] 

这只是一个更好,更通用的方法来进行传统迭代for循环,并且each都比Ruby中的循环更受欢迎(事实上,我认为我从未在Ruby中使用for循环)。

但是, map迭代每个元素,使用块的返回值在每个相应的索引处填充新数组并返回该新数组:

 [1, 2, 3].map do |i| i + 1 end # => [2, 3, 4] 

因此,它使用给定的块将每个元素“映射”到一个新元素,因此命名为“map”。 请注意, each map each不会修改原始集合。

each返回原始对象。 它用于使用数组的每个元素运行操作,而不收集任何结果。 例如,如果要打印数字列表,可以执行以下操作:

 arr = [1, 2, 3, 4] arr.each { |n| puts n } 

现在,上面的puts方法实际上返回nil 。 有些人不知道,但无论如何都没关系; 没有真正的理由收集该值(如果你想将arr转换为字符串,你应该使用arr.map(&:to_s)arr.map { |n| n.to_s }


map返回传递给它的块的结果。 这是对数组中的每个元素运行操作并检索结果的好方法 。 如果你想将数组的每个元素乘以2,这是自然的选择。 作为奖励,您可以使用map!修改原始对象map! 。 例如:

 arr = [1, 2, 3, 4] arr.map! { |n| n * 2} # => [2, 4, 6, 8]