Как мне преобразовать восьмеричное число в десятичное в Ruby? - PullRequest
3 голосов
/ 18 августа 2010

Я пытаюсь найти чистый способ ссылки на индекс массива с использованием восьмеричной нумерации. Если я ищу восьмеричный индекс массива 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

Есть ли лучший способ?

1 Ответ

6 голосов
/ 18 августа 2010

Использовать восьмерично-целочисленный литеральный синтаксис Ruby.Поместите 0 перед вашим числом, и Ruby преобразует его в восьмеричное во время синтаксического анализа:

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

Если восьмеричное число исходит из внешнего источника, такого как файл, то это уже строка, и вынужно конвертировать так же, как вы это делали в своем примере:

number = gets.chomp # => "13"
v = number.to_i(8)  # => 11
a[v]                # => 61
...