我有一个数组a = [1, 2, 3, 4, 5]
如果我在数组中有一个元素,我可以通过
a[0].next
有没有一种方法可以用来找到前一个元素
a[1].previous
或 a[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/