Я строию базовый конвертер. Вот мой код:Как использовать хэш для изменения значений массива?
def num_to_s(num, base)
remainders = [num]
while base <= num
num /= base #divide initial value of num
remainders << num #shovel results into array to map over for remainders
end
return remainders.map{|i| result = i % base}.reverse.to_s #map for remainders and shovel to new array
puts num_to_s(40002, 16)
end
Теперь пришло время для учета баз более 10, где буквы заменяют цифры. В инструкциях (упражнения) предлагается использовать хэш. Вот мой хэш:
conversion = {10 => 'A', 11 => 'B', 12 => 'C', 13 => 'D', 14 => 'E', 15 => 'F',}
Проблема теперь, как ее включить, чтобы она изменяла массив? Я пробовал:
return remainders.map{|i| result = i % base}.map{|i| [i, i]}.flatten.merge(conversion).reverse.to_s
В попытке преобразовать массив «остатков» в хэш и объединить их, чтобы значения в «преобразовании» переопределить те, в «остатках», но я получаю «странный список для Hash ". После некоторых исследований, похоже, из-за версии Ruby (1.8.7) я запускаю и не смог обновить. Я также попытался преобразование массива в хэш за пределами возвращения:
Hashes = Hash[remainders.each {|i, i| [i, i]}].merge(conversion)
и я получаю ошибку «динамического постоянная назначения». Я попробовал кучу разных способов сделать это ... Может ли хэш даже использоваться для изменения массива? Я тоже думал, может быть, я мог бы это сделать, используя условный оператор в перечислении (каждая? Карта?), Но не смог выполнить эту работу. МОЖЕТ ЛИ УСТАНОВИТЬ условие в перечислителе?
Я должен спросить: почему вы используете восьмилетнюю версию Ruby? –
он пришел с моим imac, которому около 6 лет, и по-прежнему OS 10.6.8. Я попытался обновить свой рубин сегодня, и он не сработал, где-то в потоке ошибок, у меня сложилось впечатление, что он говорил мне, что мне нужно обновить моя операционная система, которая является испытанием для себя, и я стараюсь избегать. Я слышал ужасные вещи о Йосемити. Но если я ДОЛЖЕН, я это сделаю. – HolyMoly
Вам действительно нужно обновить, по крайней мере, до Mavericks, а затем установить [RVM] (https://rvm.io) («Ruby Version Manager») и использовать его для установки и переключения между версиями Ruby. RVM немного запутывается, но просто следуйте пошаговым инструкциям, и все будет в порядке. Я предлагаю вам использовать последнюю версию Ruby (в настоящее время 2.2). –