2016-09-28 1 views
0

Я пытаюсь напечатать хэш строки и целые числа в рубине в следующем формате:печати хеш-рубина с углублением для каждой строки

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5} 
puts x 

вывод должен выглядеть примерно так:

abc 12 
abcdef 44 
sryyy 5 

Я могу получить максимальную длину каждой строки, а затем отложить каждую строку в соответствии с этим, но есть ли более простой способ сделать это? или есть способ, который делает это уже?

+1

Я не вижу, как; не зная максимальной длины ключа, нет способа узнать ваш уровень отступов. –

+0

вопрос обновлен –

+1

Посмотрите на драгоценный камень 'awesome_print' –

ответ

0

Учитывая этот пример. Я думаю, что что-то же просто, как найти длину макс и отступы с помощью Sprintf будет достаточно, например,

def justified_printing_hash(h) 
    max_length = h.keys.max_by(&:length).length 
    h.each {|k,v| puts sprintf("%<key>#{max_length}s %<value>d",{key:k,value:v}) } 
end 

Использование в качестве

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5} 
justified_printing_hash(x) 
    abc 12 
abcdef 44 
sryyy 5 
#=> {"abc" => 12,"abcdef" => 44, "sryyy" => 5} 
0

Или мало обновлений @engineersmnky вы можете сделать это следующим образом:

x = {"abc" => 12,"abcdef" => 44, "sryyy" => 5} 
x.each do |key, value| 
    p "#{key.rjust(x.keys.max_by(&:length).length)} #{value}" 
end 

> abc 12 
> abcdef 44 
> sryyy 5 
Смежные вопросы