2016-07-06 10 views
0

私はShopクラスを持っています。複数のアイテムを同時に追加したいと思います。私はこれ欲しい :Ruby、一度に配列に複数のオブジェクトを追加する

shop1 = Shop.new 
product1 = Product.new("Dress", 50) 
shop1.add_products(product1, 5) 

ので、後で私は

@products.select{|p| p.name == "Dress"}.count 

を使用して5を得ることができます

def add(product, qty) 
    @products << product * qty 
end 

倉庫に5つのドレスを追加するためには、それは可能ですか?

+0

あなたは '[item] * 3'を実行すると、3つのアイテムではなく、同じアイテムへの3つの参照の配列を取得することに注意してください。いずれかを変更すると、すべての配列項目に影響します。 –

答えて

3

私が考える最も簡単な方法は次のとおりです。

def add(product, qty) 
    @products += [product] * qty 
end 

しかし、それはすべてに降りてくるあなたの構文の設定

+0

'concat'バージョンとの違いは、既存のものに追加するのではなく、新しい配列を作成することです。どちらもそれを行う有効な方法です。 OPがやったこともあるので、私はインプレース編集をしました。 –

3

あなたはこの

def add(product, qty) 
    @products.concat([product] * qty) 
end 

以下 "賢い" のような何かを行うことができ

def add(product, qty) 
    qty.times { @products << product } 
end 
1

これまでの両方の回答が問題を解決します。ただし、配列の代わりにハッシュを使用することを検討する必要があります。このような

何か:私のGitHubで

class Product  
    @@products = Hash.new(0) 

    def initialize(product, qty) 
    @@products[product] = qty 
    end 

    def increase_stock(product, qty) 
    @@products[product] += qty 
    end 

    def decrease_stock(product, qty) 
    @@products[product] -= qty 
    end 

    def count_stock(product) 
    @@products[product] 
    end 
end 

p = Product.new('Dress',5) 
p.count_stock('Dress') 
=> 5 
p.increase_stock('Dress',10) 
p.count_stock('Dress') 
=> 15 
p.decrease_stock('Dress',2) 
p.count_stock('Dress') 
=> 13 

simple command-line inventory management app written in Rubyがあります。

関連する問題