Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Ruby,一次向数组添加多个对象_Arrays_Ruby - Fatal编程技术网

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

Arrays Ruby,一次向数组添加多个对象,arrays,ruby,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 得到5分。有可能吗?你可以这样做 def add(product, qty) @products.concat([produ

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

shop1 = Shop.new
product1 = Product.new("Dress", 50)
shop1.add_products(product1, 5)
向仓库添加5件连衣裙

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

得到5分。有可能吗?

你可以这样做

def add(product, qty)
  @products.concat([product] * qty)
end
或者更不“聪明”

def添加(产品、数量)

qty.times{@products我认为最简单的方法是:

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

<>但是这都归结于你的语法偏好。

< P>这两个先前的答案都会解决你的问题。但是,也许你应该考虑用一个哈希代替一个数组。

大概是这样的:

 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中,有一个.可能很有用.

concat
版本的不同之处在于,此版本创建了一个新数组,而不是添加到现有数组中。它们都是有效的方法。我进行了就地编辑,因为OP也这样做。不过,请小心:在执行
[项目]时*3
,您将获得一个包含对同一项目的三个引用的数组,而不是三个项目。更改其中任何一个都将影响所有数组项目。
def add(product, qty)
  @products += [product] * qty
end
 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