【问题标题】:How to find the index of the last array element如何找到最后一个数组元素的索引
【发布时间】: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
  • 我只是在实现一个面试风格的小问题,解决方案需要同时从两端遍历一组数字,直到找到符合特定标准的一对(我可以很快发布代码)。使用负索引听起来确实是一种更简洁的方法,但是我将不得不改变我检测两个标记是否在同一个元素上相遇的方式。我认为使用两个枚举器也有类似的问题(通过indexrindex
  • @suhail 我不确定这是否是个玩笑,但这完全是错误的,而且比简单地写a.length - 1 要糟糕得多。如果数组包含重复项,它将完全失败,并且在它工作的情况下,它涉及对整个数组的线性扫描,没有理由,只是为了得到数字.length - 1

标签: arrays ruby


【解决方案1】:
 arr = [1,2,3,4,5,6]

 def last_index(arr)
   counter = -1
   arr.each do |i| 
      i
      counter += 1 
   end 
   counter
 end
last_index(arr)

【讨论】:

  • 这将返回最后一个元素6,但我们感兴趣的是它的索引5。另请注意,您的参数名称具有误导性,因为您需要传递一个数组。
  • 以为他在寻找数组中的最后一个元素,已编辑。
  • 不幸的是,您的编辑只是偶然的。如果您查看 arr 的正索引,它们是 0、1、2、3、4 和 5。所以最后一个元素 6 的索引为 5。例如如果我们有另一个相同大小的数组[1,1,1,1,1,2],最后一个元素是2,但它的索引仍然是5
  • 啊,我读错了问题。有机会我会再编辑的。
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多