2017-02-23 30 views
0

Итак, я пытался создать программу, которая напоминает список продуктов, в котором пользователь помещает элемент и связанную с ним стоимость, и он отображает его как форму списка. Так что я создал это:Проблемы с выходным форматом hash

arr = [] 
arr2 = [] 
entry = " " 

while entry != "q" 
    print "Enter your item: " 
    item = gets.chomp 
    print "Enter the associated cost: " 
    cost = gets.chomp.to_f 
    print "Press any key to continue or 'q' to quit: " 
    entry = gets.chomp 

    arr << item 
    arr2 << cost 
end 

h = { arr => arr2 } 

for k,v in h 
    puts "#{k} costs #{v}" 
end 

(код, вероятно, очень неэффективно, но с моим ограниченным знанием стартером это лучшее, что я могу сделать)

Так что моя проблема в том, когда я пытаюсь больше двух пунктов результаты будут дисплей, как это (Скажем, я использовал банан и киви для пункта и поставить случайное число для их стоимости):

["Banana", "Kiwi"] costs [2.0, 3,0] 

Я, однако, хотел бы, чтобы это показать, как это:

Banana costs $2.00 

Kiwi costs $3.00 

Я знаю, что это, вероятно, имеет что-то делать с этой линией:

h = { arr => arr2 } 

Но я просто не знаю, что я могу изменить о нем. Я уже часами пытаюсь выяснить, как это работает, поэтому, если кто-нибудь может дать мне подсказку или помочь мне, я был бы признателен! (Также мои извинения за смутное название, не знаю, как его описать ...)

ответ

3

да, вы правы. Проблема заключается в этой строке h = { arr => arr2 }. Эта строка создаст хэш как h = {["Banana", "Kiwi"] => [2.0, 3,0]}.

1) Вы можете изменить свой код, как показано ниже, если вы хотите использовать два массива.

(0...arr.length).each do |ind| 
    puts "#{arr[ind]} costs $#{arr2[ind]}" 
end 

2) Более того, вы можете использовать хэш для хранения элемента и его стоимость, а затем итерацию над ней, чтобы показать результаты

hash = {} 
entry = " " 

while entry != "q" 
    print "Enter your item: " 
    item = gets.chomp 

    print "Enter the associated cost: " 
    cost = gets.chomp.to_f 

    print "Press any key to continue or 'q' to quit: " 
    entry = gets.chomp 

    hash[item] = cost 
end 

hash.each do |k,v| 
    puts "#{k} costs $#{v}" 
end 
+1

Вау! Спасибо, что это действительно полезно, не знал, что это так просто. – Vroryn

2

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

arr.each_with_index do |item, i| 
    puts "#{item} costs #{arr2[i]}" 
end 

Но лучше было бы хранить все данные в 1-хэша вместо 2-х массивов ,

items = {} 
entry = " " 

while entry != "q" 
    print "Enter your item: " 
    item = gets.chomp 
    print "Enter the associated cost: " 
    cost = gets.chomp.to_f 

    print "Press any key to continue or 'q' to quit: " 
    entry = gets.chomp 

    items[item] = cost 
end 

items.each do |item, cost| 
    puts "#{item} costs #{cost}" 
end 

Сообщите мне, если это поможет.

+0

Определенно полезно! Спасибо, что нашли время ответить! – Vroryn

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