【问题标题】:Reversing enumerable in Ruby在 Ruby 中反转可枚举
【发布时间】:2012-06-06 21:56:58
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: ruby enumerable


    【解决方案1】:

    从 1.8.7 开始,Enumerable#each_* 方法 return an enumerator 在没有提供块的情况下,所以那些最初的命令式方法现在可以在纯表达式中使用。

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

    reversed_values = [1, 2, 3].reverse_each.map { |x| 2*x }
    #=> [6, 4, 2]
    

    【讨论】:

      【解决方案2】:

      (1..3).reverse_each {|v| p v }

      产生:

      1 2 3

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

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

      但是ruby的map方法

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

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

      reverse_each - 将充当迭代器

      map - 将形成一组新的集合

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-28
          • 2015-06-16
          • 1970-01-01
          • 2011-02-06
          相关资源
          最近更新 更多