2015-03-29 3 views
-1

у меня есть хэш, как так:Ruby: итерация хэша и форматирования отображения

top_billed = { ghostbusters: 'Bill Murray', star_wars: 'Harrison Ford' } 

Что бы лучший способ отформатировать его в хорошем, читабельной образом? Например, если вы вызвали метод хэша и отобразили хеш в качестве заглавного списка, минус подчеркивание.

  • «Ghostbusters: Билл Мюррей
  • Звездные войны: Харрисон Форд

Я думаю, итерация массива и используя GSUB для удаления подчеркивания, то ИНВЕСТИЦИОНННЫЕ может работать, но мне было интересно, есть ли что-нибудь . более элегантный

Благодаря

+0

Что вы подразумеваете под "минус подчеркивания"? – sawa

+0

Если вы удалите символы подчеркивания из ': star_wars', вы получите': starwars'. – sawa

+0

Какова логика наличия двойной кавычки в начале «Ghostbusters»? – sawa

ответ

0

Вот рекурсивное решение:

top_billed = { ghostbusters: { my_name: 'Bill Murray', my_age: 29 }, star_wars: { my_name: 'Harrison Ford' }, something_esle: 'Its Name'} 

def print_well(key, value, indent) 
    key = key.to_s.split('_').map(&:capitalize).join(' ') 
    if Hash === value 
    puts "#{key}: " 
    value.each do |k, v| 
     print_well k, v, indent + 1 
    end 
    else 
    puts "#{' '*indent}#{key}: #{value}" 
    end 
end 

def print_hash hash, indent=0 
    hash.each do |key, value| 
    print_well key, value, indent 
    end 
end 

print_hash top_billed 
+0

Я использую драгоценные камни, но, как кто-то, изучающий основы языка, было бы полезно знать, как все работает. – siroik

0

вручную:

top_billed.each do |k, v| 
    puts k.to_s.gsub("_", " ") + ": " + v 
end 

, если вы используете Rails или ActiveSupport, вы можете также использовать "humanize" метод (на шнурке).

+0

, возможно, отдельный вопрос, но как это происходит, когда это выполняется внутри irb, оно отображается как ожидалось, но irb отображает конечный результат в качестве исходного хэша? – siroik

+0

irb показывает как выход (поэтому результат «puts»), так и результат каждой введенной команды - это удобно для отладки, в которой работает irb. – Martin

Смежные вопросы