11

我试图在不使用reverse方法但使用reverse_each迭代器的情况下反转 Enumerable(如 Array)。

我希望,以下代码就足够了:

p [1,2,3].reverse_each {|v| v }

但是该块不会以相反的顺序返回数组。我当然可以写

[1,2,3].reverse_each {|v| p v }

但我想以第一种方式收集物品。如果这种行为的来源是什么,我应该如何写我的表达来满足要求?

4

3 回答 3

24

从 1.8.7 开始,Enumerable#each_*方法在没有提供块时返回一个枚举器,因此那些最初的命令式方法现在可以在纯表达式中使用。

因此,如果您想收集项目,请Enumerable#map在该枚举器上使用:

reversed_values = [1, 2, 3].reverse_each.map { |x| 2*x }
#=> [6, 4, 2]
于 2012-06-01T16:25:52.693 回答
-1

(1..3).reverse_each {|v| 光伏 }

产生:

1 2 3

它构建一个临时数组并以相反的顺序遍历该数组,但不返回转换后集合的反向副本

如果没有给出块,则返回一个枚举器。

但是ruby的map方法

为枚举中的每个元素返回一个新数组,其中包含一次运行块的结果。

p [1,2,3].reverse_each.map {|v| v }

reverse_each - 将充当迭代器

map - 将形成一组新的集合

于 2017-07-13T17:08:15.287 回答
-1

另一种方法是[1, 2, 3].reverse_each.to_a

于 2016-10-27T12:24:53.697 回答