2016-07-06 15 views
0

Ich habe Shop-Klasse, und ich möchte mehrere Elemente gleichzeitig hinzufügen. Ich möchte dies:Ruby, Hinzufügen mehrerer Objekte zu einem Array auf einmal

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

hinzufügen 5 Kleider Lager

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

so später kann ich

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

und 5. es möglich ist, erhalten benutzen?

+0

Seien Sie vorsichtig, wenn Sie '[item] * 3', erhalten Sie ein Array von drei Referenzen auf den gleichen Artikel, nicht drei Elemente. Das Ändern eines dieser Elemente wirkt sich auf alle Array-Elemente aus. –

Antwort

3

Der einfachste Weg, ich denke, ist:

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

Aber es kommt alles auf Ihre Syntaxpräferenzen.

+0

Der Unterschied zur "concat" -Version besteht darin, dass diese ein neues Array erstellt, anstatt das vorhandene Array hinzuzufügen. Sie sind beide gültige Möglichkeiten, es zu tun. Ich habe einen In-Place-Schnitt gemacht, weil das auch der OP getan hat. –

3

Man könnte so etwas wie dieses

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

oder weniger "clever" do

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

Beide vorherigen Antworten lösen Ihr Problem. Vielleicht sollten Sie jedoch einen Hash anstelle eines Arrays in Betracht ziehen.

Etwas wie folgt aus:

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 

In meinem GitHub gibt es eine simple command-line inventory management app written in Ruby. Kann nützlich sein ..

Verwandte Themen