ハッシュとして使用できるさまざまなアイテムをカウントするのに役立ちます。ハッシュは配列に似ていますが、インデックスとして整数の代わりに文字列を使用します。
a = Array.new
a[0] = "this"
a[1] = "that"
h = Hash.new
h["sonja"] = "asecret"
h["brad"] = "beer"
この例では、ユーザーのパスワードを格納するためにハッシュが使用される可能性があります。しかし、あなたの例では、カウントするためのハッシュが必要です。shopping_list("eggs", "beer", "milk", "eggs") を呼び出すと、次のコマンドが実行されます。
h = Hash.new(0) # empty hash {} created, 0 will be default value
h["eggs"] += 1 # h is now {"eggs"=>1}
h["beer"] += 1 # {"eggs"=>1, "beer"=>1}
h["milk"] += 1 # {"eggs"=>1, "beer"=>1, "milk"=>1}
h["eggs"] += 1 # {"eggs"=>2, "beer"=>1, "milk"=>1}
each-loop を使用して、ハッシュのすべてのキーと値を処理できます。
h.each{|key, value| .... }
結果として必要な文字列を作成し、必要に応じてアイテムの数とアイテムの名前を追加します。ループ内では、最後に常にカンマと空白を追加します。これは最後の要素には必要ないため、ループが完了した後は
"2 eggs, beer, milk, "
最後のコンマと空白を取り除くには、chop! を使用できます。これは、文字列の末尾にある 1 文字を「切り取る」ものです。
output.chop!.chop!
食料品店リストの完全な実装を取得するには、もう 1 つ必要なことがあります。関数を次のように呼び出す必要があることを指定しました。
puts grocery_list("eggs", "beer", "milk","eggs")
そのため、grocery_list 関数は、取得している引数の数を認識していません。これは、前に星印を付けて 1 つの引数を指定することで処理できます。この引数は、すべての引数を含む配列になります。
def grocery_list(*items)
# items is an array
end
だからここにあります:私はあなたのために宿題をして、grocery_listを実装しました。実装を理解するのに実際に苦労してください。単にコピーして貼り付けるだけではありません。
def grocery_list(*items)
hash = Hash.new(0)
items.each {|x| hash[x] += 1}
output = ""
hash.each do |item,number|
if number > 1 then
output += "#{number} "
end
output += "#{item}, "
end
output.chop!.chop!
return output
end
puts grocery_list("eggs", "beer", "milk","eggs")
# output: 2 eggs, beer, milk