2013-11-13 6 views
0

Я просматриваю тестовые задачи Ruby и работаю над проблемой 11, словарем. Окончательный тест в spec-файле требует, чтобы я печатал все ключи и значения хэша (слова и их определения) в определенном формате.Как отформатировать вывод хэша в Ruby?

Как это сделать? Существует ли конкретное имя для этого типа вывода? Я не могу понять, как заставить вывод выглядеть так, или что означают все лишние символы.

it 'can produce printable output like so: [keyword] "definition"' do 
    @d.add('zebra' => 'African land animal with stripes') 
    @d.add('fish' => 'aquatic animal') 
    @d.add('apple' => 'fruit') 
    @d.printable.should == %Q{[apple] "fruit"\n[fish] "aquatic animal"\n[zebra] "African land animal with stripes"} 
end 

Когда я запускаю метод и просто возвращает хэш, обычно это говорит, что это:

expected: "[apple] \"fruit\"\n[fish] \"aquatic animal\"\n[zebra] \"African land animal with stripes\"" 

Обновление 6:38 вечера по тихоокеанскому времени

Я не могу ответить на мои собственные вопросы еще так что вот мое решение:

Первая попытка:

def printable 
    print_string = "" 
    @hash1.sort.each do |k,v| 
     print_string = print_string + "[" + k + "]" + " " + "#{v.to_s}" + "\n" 
    end 
    print_string.chomp 
end 

Он вернулся в основном правильный ответ, но я не мог понять, как получить кавычки определений слова:

=> «[яблоко] фрукты \ п [рыба] водное животное \ п [ зебра] Африканское сухопутное животное с полосками «

Я попытался использовать обертку% Q {} из спецификации и решил проблему с кавычками. Затем я переработал свои обозначения переменных и таких, как показано ниже.

Это ответ, который я наконец придумал:

def printable 
    printable_string = "" 
    @hash1.sort.each do |k,v| 
    printable_string = printable_string + %Q{[#{k}] "#{v}"\n} 
    end 
    return printable_string.chomp 
end 

Он возвращает правильный ответ:

=> "[яблоко] \" фрукты \ "\ п [рыбы] \" Aquatic животное \ "\ п [зебра] \" African сухопутное животное с полосами \ ""

+0

Что такое 'printable'? – whatyouhide

+0

Printable - это метод, который выводит хеш в указанном формате. – jhietter

ответ

1

Вы можете перебрать ваш хэш как и

d.each do |key,value| 
    puts key 
    puts value 
end 
0

Цель этой проблемы - узнать, как перебирать ключи и значения хэша и как выполнять интерполяцию строк. Вы должны быть в состоянии сделать это, используя следующие указания:

Hash#each

string interpolation in ruby

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