【发布时间】:2017-10-06 14:17:20
【问题描述】:
在你必须处理数组索引(并且不能只使用枚举器)的情况下,你如何找到最后一个元素的索引?
这两个选项浮现在脑海中,但我希望有一个更能自我记录的答案(如Array#last(),但用于索引而不是元素):
a = [0, 1, 2, 3]
# option 1
last_index = a.length - 1
# option 2
last_index = a.rindex { true }
【问题讨论】:
-
在 Ruby 中,很少需要单独使用索引。为什么你特别需要最后一个元素的索引,而不是大小?
-
我相信你有一个更广泛的问题,这只是你认为的解决方案的一部分。你应该写那个更广泛的问题。否则,这可能会变成an XY-problem。
-
大多数(如果不是全部)处理数组索引的方法接受从末尾倒数的负索引,即
-1指的是最后一个元素:a[-1] #=> 3 -
我只是在实现一个面试风格的小问题,解决方案需要同时从两端遍历一组数字,直到找到符合特定标准的一对(我可以很快发布代码)。使用负索引听起来确实是一种更简洁的方法,但是我将不得不改变我检测两个标记是否在同一个元素上相遇的方式。我认为使用两个枚举器也有类似的问题(通过
index和rindex) -
@suhail 我不确定这是否是个玩笑,但这完全是错误的,而且比简单地写
a.length - 1要糟糕得多。如果数组包含重复项,它将完全失败,并且在它工作的情况下,它涉及对整个数组的线性扫描,没有理由,只是为了得到数字.length - 1。