ruby - 在 Ruby 数组 Enumerable Enumerator 中查找上一个元素

标签 ruby

我有一个数组a = [1, 2, 3, 4, 5]

如果我在数组中有一个元素,我可以通过 a[0].next

有没有一种方法可以用来找到前一个元素 a[1].previousa[1].before 这样的结果是

#=> 1

我用 Google 搜索了一下,似乎大多数其他类似问题都涉及一个我不想做的循环。我还查看了 Enumerator 的 Ruby 文档& Enumerable似乎找不到。

>> a = [1, 2, 3, 4, 5] #=> [1, 2, 3, 4, 5]
>> a[0].next #=> 2
>> a[2].previous
NoMethodError: undefined method `previous' for 3:Fixnum
    from (irb):14
    from /Users/Lois/.rvm/rubies/ruby-2.3.1/bin/irb:11:in `<main>'
>> a[2].before
NoMethodError: undefined method `before' for 3:Fixnum
    from (irb):15
    from /Users/Lois/.rvm/rubies/ruby-2.3.1/bin/irb:11:in `<main>'

提前致谢!

最佳答案

如果你有一个数组:

a = [ 1, 2, 3, 4 ]

然后调用 a[1] 将返回对象 2,并且该值没有什么特别之处,一旦您检索到它就没有上下文。因此,对其调用 next 将始终产生 3 因为这就是 Integer#next

为了在该数组中导航,您需要某种迭代器,例如 Enumerator :

e = a.each

现在你可以做你想做的了:

e.next
# => 1
e.next
# => 2

请注意,此界面并不像您期望的那样灵活。您可以调用 next 前进,或调用 rewind 返回开头,但是没有 previous。 Ruby 没有其他语言称为双向迭代器的东西,但如果您有勇气,可以扩展此类以添加所需的函数。

关于ruby - 在 Ruby 数组 Enumerable Enumerator 中查找上一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969111/

相关文章:

mysql - 无法在 Mac OS X 上安装 Ruby MySQL Gem

ruby - 提取二维子数组(不使用矩阵)

ruby 最长回文

ruby-on-rails - rails 4 : Model Logic - Counting Items by a User

ruby - 如何在 Ruby 中的其他正则表达式中嵌入正则表达式

ruby - 在 Ruby 中如何查找一个字符串是否以另一个字符串开头?

ruby-on-rails - 在 Rails 中调试?

ruby-on-rails - 访问事件记录查询中的实例方法

ruby-on-rails - Devise token auth 无法验证 CSRF token 的真实性

ruby - 在每个线程的基础上设置 ruby​​ logger.progname