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工具之一 。
顺便说一下,您可能很难找到文档,因为map是Enumerable中的一个方法,而每个 ( 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用于迭代,但将元素映射到其他东西,比如值乘以常量。 在您的示例中,它们可以互换使用,但每个都是更通用的迭代器,它将元素传递给块。