gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:43 27 4
gpt4 key购买 nike

我有一个数组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/

27 4 0