2010-08-18 2 views
3

Я пытаюсь найти чистый способ ссылки на индекс массива, используя восьмеричную нумерацию. Если я ищу индекс массива, который является восьмеричным 13, он должен вернуть значение для a[11].Как преобразовать восьмеричное число в десятичный в Ruby?

Это то, что я придумал, чтобы достичь этого, но это не кажется очень элегантно и эффективно:

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 

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

+0

Тот факт, что вам нужен доступ к массиву с этим номером, ничего не значит. Итак, я отбросил все упоминания массива из тегов и заголовков. –

+0

Простите, я не был уверен, возможно ли что-то уникальное в индексе массива, к которому я мог бы получить доступ. Для меня это очень новая территория! Благодарим вас за исправление моей ошибки. – arriflex

+0

Дело в том, что я думаю, что очевидно, что нет языка программирования, где это имеет значение :-) –

ответ

6

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

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

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

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

Sweet! Это то, о чем я говорю! Благодарю. – arriflex

+0

общий доступ к SSN и другим ситуациям, которые могут начинаться с нуля. :) –