2017-02-23 63 views
0

所以我試圖創建一個類似於購物清單的程序,用戶在其中放置物品及其相關成本,並將其顯示爲列表形式。所以我創造了這個:散列輸出格式的問題

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