У меня есть хэш, который имеет неизвестную коллекцию и смесь вложенных массивов, хэшей, массивов хешей и строк. Это результат JSON.parse
. Структура данных должна быть такой же, как и в начале. Конечной целью является преобразование строк в Fixnums, которые могут быть Fixnums.Ruby рекурсивная карта хэша объектов
Следующие работы прекрасно, но мне было интересно, можно ли сократить его. Обратите внимание, как мне нужен ключ и значение в методе clean
, поскольку не все строки, которые могут быть Fixnums, должны быть. Есть идеи?
def clean_node(node)
if node.class == String
clean(node)
elsif node.class == Array
node.each_with_index do |obj, i|
if obj.class == String
node[i] = clean(node[i], obj)
else
clean_node(obj)
end
end
elsif node.class == Hash
node.each_pair do |key, value|
if value.class == String
node[key] = clean(key, value)
else
clean_node(value)
end
end
end
end
def clean(key, value)
FIXNUM_KEYS.include?(key)? value.to_i : value
end
Вы сами генерируете JSON? Похоже, что JSON содержит числа как строки. Я бы скорее попытался исправить код, который генерирует JSON. –
В строке 7, в правой части задания, 'node [i]' совпадает с 'obj'. Почему вы пишете 'clean (node [i], obj)'? – sawa
, несмотря на странную логику, отмеченную пилой, этот тип кода довольно типичен для обработки гетерогенных структур данных - я не думаю, что это действительно упрощает .... – GreenAsJade