array.each和array.map有何不同?

Jer*_*ith 18 ruby iterator

可能重复:
Array#each与Array #map

ruby-1.9.2-p180 :006 > ary = ["a", "b"]
 => ["a", "b"] 
ruby-1.9.2-p180 :007 > ary.map { |val| p val }
"a"
"b"
 => ["a", "b"] 
ruby-1.9.2-p180 :008 > ary.each { |val| p val }
"a"
"b"
 => ["a", "b"] 

ruby-1.9.2-p180 :009 > ary.map { |val| val << "2" }
 => ["a2", "b2"] 
ruby-1.9.2-p180 :010 > ary.each { |val| val << "2" }
 => ["a22", "b22"] 
Run Code Online (Sandbox Code Playgroud)

Dig*_*oss 52

副作用是它增加了一些混乱的逆向工程相同.

是的,两者都遍历数组(实际上,任何混合在Enumerable中的东西)但map会返回一个由块结果组成的数组,而每个数组只返回原始数组.Ruby代码中很少使用每个的返回值,但map最重要的功能工具之一.

顺便说一下,您可能很难找到文档,因为mapEnumerable中的一个方法,而每个(Enumerable模块所需的一个方法)是Array中的方法.

作为一个琐事说明:地图实施基于每个.

  • +1用于将"map"链接到函数式编程.另一方面,"每个"是具有副作用的常见命令循环. (5认同)
  • 非常有帮助,谢谢. (3认同)

Nar*_*iya 8

API docs中的定义:each:为self中的每个元素调用一次,将该元素作为参数传递.map:为self的每个元素调用一次block.创建一个包含块返回的值的新数组.

所以每个都是一个正常的循环,它遍历每个元素并调用给定的块

map通常用于您希望另一个数组通过某个逻辑映射到现有数组的位置.您也可以将方法作为参考传递给map函数

[1,2,3].map(&:to_s)
Run Code Online (Sandbox Code Playgroud)