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

可能重复:
Array#each vs. 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 < ["a2", "b2"] ruby-1.9.2-p180 :010 > ary.each { |val| val < ["a22", "b22"] 

副作用是相同的,这给您的逆向工程增加了一些困惑。

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

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

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

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

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

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

 [1,2,3].map(&:to_s) 

Array #map是每个元素的阻塞中返回的任何内容的集合。

Array#每个执行每个元素的代码块,然后返回列表本身。

您应该检查此Array#each与Array#map

每个都只是一个迭代器,它获取迭代的下一个元素并将其提供给块。 Map用于迭代,但将元素映射到其他东西,比如值乘以常量。 在您的示例中,它们可以互换使用,但每个都是更通用的迭代器,它将元素传递给块。