Ruby,一次向数组添加多个对象

时间:2016-07-06 10:45:46

标签: arrays ruby

我有Shop课程,我想一次添加多个项目。 我想要这个:

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

将5件衣服添加到仓库

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

所以稍后我可以使用

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

并得到5.有可能吗?

3 个答案:

答案 0 :(得分:3)

你可以做这样的事情

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

或更少&#34;聪明&#34;

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

答案 1 :(得分:3)

我认为最简单的方法是:

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

但这完全取决于你的语法偏好。

答案 2 :(得分:1)

以前的答案都可以解决您的问题。但是,也许您应该考虑使用哈希而不是数组。

这样的事情:

 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

在我的GitHub中,有一个simple command-line inventory management app written in Ruby。可能有用..