3

我试图找到一种使用八进制编号引用数组索引的干净方法。如果我正在寻找八进制 13 的数组索引,它应该返回a[11].

这是我想出的完成它,但它似乎不是很优雅或高效:

a = [ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62 ]

v = 13

puts a[v.to_s.to_i(8)]  # => 61
 # OR
puts a[v.to_s.oct]      # => 61

有没有更好的办法?

4

1 回答 1

7

使用 Ruby 的八进制整数文字语法。在您的数字前放置一个 0,Ruby 会在解析时将其转换为八进制:

v = 013 # => 11
a[v]    # => 61

如果八进制数来自像文件这样的外部来源,那么它已经是一个字符串,您必须像在示例中那样转换它:

number = gets.chomp # => "13"
v = number.to_i(8)  # => 11
a[v]                # => 61
于 2010-08-18T05:08:51.330 回答