2016-08-09 12 views
1

誰かが私のコードが通っていない理由を理解するのを助けることができたら、私は感謝します。 私はここで議論しました。ネストされたハッシュ操作

カートのアイテム:

{ 
    "AVOCADO" => {:price => 3.0, :clearance => true, :count => 3}, 
    "KALE" => {:price => 3.0, :clearance => false, :count => 1} 
} 

クーポン:

{:item => "AVOCADO", :num => 2, :cost => 5.0} 

それは、これを返すために私を必要とします。

{ 
    "AVOCADO" => {:price => 3.0, :clearance => true, :count => 1}, 
    "KALE" => {:price => 3.0, :clearance => false, :count => 1}, 
    "AVOCADO W/COUPON" => {:price => 5.0, :clearance => true, :count => 1}, 
    } 

ここに私のコードです:

def apply_coupons(cart:[], coupons:[]) 

    app_coupon = {} 
    cart.each do |items| 
    items.each do |item_name, value| 
     app_coupon[item_name] = value 
     coupons.each do |coupon| 
     if coupon[:item] == item_name 
      app_coupon["#{coupon[:item]} W/COUPON"] = {:price => coupon[:cost], :clearance => value[:clearance], :count => value[:count]/coupon[:num] } 
      app_coupon[item_name][:count] -= coupon[:num] 
     end 
     end 
    end 
    end 
    app_coupon 
end 
+0

クーポンに「num:2」と表示されていてもクーポンで割引している理由はわかりません。また、実際にハッシュを期待しているときに、配列の既定値でキーワード引数を宣言しています。 – tadman

+0

はい、私の議論はカートとクーポンの配列の中にハッシュです。 –

+0

この場合、メソッドを 'cart:{}、coupons:{}'として宣言したいかもしれません。 Ruby 2.3のキーワード - arugmentsではなくRuby 1.8のハッシュ表記を使用しているのは奇妙です。一貫性を保つために: 'price:3.0、clearance:true、...' – tadman

答えて

0

一つの可能​​性のある問題..

クーポン:

{:item => "AVOCADO", :num => 2, :cost => 5.0} 

が...これはただ一つのハッシュですが、あなたのコードでは、あなたは...

coupons.each do |coupon| 

をやっています..あなたは配列を期待しています。

[{:item => "AVOCADO", :num => 2, :cost => 5.0}] 
+0

実際、私はそれをirbで試しているときにこのように見えます。 "KALE" => {:価格=> 3.0、:クリアランス=> 3、 'apply_coupons(カート:{ " AVOCADO "=> {価格=> 3.0、クリアランス=>真、 > 0、= 2、:コスト=> 5.0}] ' –

+0

私はそれを試して、それはうまく動作します!私は結果を得ました... '{" AVOCADO "=> {:price => 3.0、:クリアランス=> true、:count => 1}、" AVOCADO W/COUPON "=> {:price => 5.0、: ' – SteveTurczyn

+0

あなたのテスト(rspec)に問題があります。あなたのrspecコードを投稿し、あなたのテストで何が見えているのかを説明できますか? – SteveTurczyn

関連する問題