我也看过Ruby-Doc,但我无法理解它们之间的区别
map
each
Run Code Online (Sandbox Code Playgroud)
迭代器.如果你能给出一个例子并解释它会很棒.
And*_*all 73
each简单地迭代给定的枚举,为每个值运行块.它会丢弃块的返回值,并且每个都返回它调用的原始对象:
[1, 2, 3].each do |x|
x + 1
end # => [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这是简单地做一个传统的迭代的一个更好的,更普遍的方式for循环,each是很多优于forRuby中环(其实,我不认为我曾经使用过for的红宝石环路).
map但是,迭代每个元素,使用块的返回值在每个相应的索引处填充新数组并返回该新数组:
[1, 2, 3].map do |x|
x + 1
end # => [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
因此,它使用给定的块将每个元素"映射"到一个新元素,因此命名为"map".请注意,它们本身都each不会map修改原始集合.这是创建数组并在迭代循环中推送它的简洁,功能性替代方法.
each返回原始对象.它用于使用数组的每个元素运行操作,而不收集任何结果.例如,如果要打印数字列表,可以执行以下操作:
arr = [1, 2, 3, 4]
arr.each { |n| puts n }
Run Code Online (Sandbox Code Playgroud)
现在,puts上面的方法实际上返回了nil.有些人不知道,但反正无关紧要; 没有真正的理由收集该值(如果你想转换arr为字符串,你应该使用arr.map(&:to_s)或arr.map { |n| n.to_s }.
map返回传递给它的块的结果.这是对数组中的每个元素运行操作并检索结果的好方法.如果你想将数组的每个元素乘以2,这是自然的选择.作为奖励,您可以使用修改原始对象map!.例如:
arr = [1, 2, 3, 4]
arr.map! { |n| n * 2}
# => [2, 4, 6, 8]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17451 次 |
| 最近记录: |