地图与每个之间的差异
可能重复:
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]