2017-02-23 4 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)2つの配列を使用する場合は、以下のようにコードを変更できます。

(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