Ruby:数组,循环数组,数组位置中的next / previous值

假设我有一系列随机数,没有特定的顺序.假设这些是在马拉松比赛中跑步的人的ID#,他们按照他们完成的顺序添加到阵列中,例如:

race1 = [8, 102, 67, 58, 91, 16, 27]
race2 = [51, 31, 7, 15, 99, 58, 22]

这是一个简化的,有点人为的例子,但我认为它传达了基本的想法.

现在有几个问题:

首先,我如何获得特定条目之前和之后的ID?让我们说我正在看第58跑,我想知道谁在他之前和之后完成.

race1, runner58: previous finisher=67, next finisher=91
race2, runner58: previous finisher=99, next finisher=22

其次,如果我正在看第一个或最后一个完成的人,我怎么能在阵列周围回到“下一个”或“前一个”循环?

race1, runner8: previous finisher=27, next finisher=102
race2, runner22: previous finisher=58, next finisher=51

最后,我想展示每个跑步者完成的位置.只考虑数组及其中的值,我怎样才能找出它在数组中的“序数”位置?即:

race1: runner8=1st, runner102=2nd, runner67=3rd ... runner27=last

非常感谢!

最佳答案
第一&第二:

index = race1.find_index(58)
if !index.nil?
  puts "#{race1[index-1], #{race1[index+1] || race1[0]}"
end

最后:

gem install linguistics

然后

require 'linguistics'
Linguistics::use( :en )
race1.each_with_index {|runner, i| puts "runner#{runner}=#{(i+1).en.ordinal}"}

转载注明原文:Ruby:数组,循环数组,数组位置中的next / previous值 - 代码日志