ruby - 在 Ruby 中反转可枚举

标签 ruby enumerable

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

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

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

然而,该 block 不会以相反的顺序返回数组。我当然可以写

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

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

最佳答案

从 1.8.7 开始,Enumerable#each_* 方法 return an enumerator当没有提供 block 时,那些原本命令式的方法现在可以在纯表达式中使用。

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

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

关于ruby - 在 Ruby 中反转可枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10854002/

相关文章:

ruby - 如何将 `--with-ruby-include` 之类的构建标志传递给 gem 安装?

ruby-on-rails - ckfinder 或 corefive.com/projects/filemanager 的 rails 连接器

php - 哪个 PHP 框架最接近于 ActiveRecord (RoR)

ruby - Enumerable#sum 如何避免浮点舍入错误?

c# - 使用 LINQ 和 C# 的随机数组

arrays - 遍历 Ruby 中的哈希数组(解析 JSON)

Ruby 没有将 Fixnum 隐式转换为 String (TypeError)

ruby - 可以在 Hash each 循环中访问索引吗?

c# - 扩展 Enumerable.Range

javascript - Immutable.js getter 用于以对象字面量表示法调用函数