我是Ruby的新手,作为我学习的一部分,我有一项任务是将CSV文件转换成我可以按价格等排序的东西。但是我在创建对象列表时遇到了问题。我知道我可以创建object1,object2等,但我不知道如何自动执行此操作。
这是我到目前为止的代码:
class Product
attr_reader :id, :name, :price, :stock
def initialize(id,name,price,stock)
@id = id
@name=name
@price=price
@stock=stock
end
def readout(variable)
print product.id
print "|"
print product.name
print "|"
print product.price
print "|"
print product.stock
puts ""
end
end
products = []
newproducts= []
File.open("products.csv" , "r") do |f|
f.each_line do |line|
products << line
end
end
puts products
products.each do |product|
data = product.split(",")
inbetween = Product.new(data[0].to_s, data[1].to_s, data[2].to_i, data[3].to_i)
inbetween
newproducts << inbetween
end
newproducts.sort_by{|x| x.price}
newproducts.each do |product|
print product.id
print "|"
print product.name
print "|"
print product.price
print "|"
print product.stock
puts ""
end
答案 0 :(得分:2)
最简单的事情可能是创建一个列表,然后在创建每个新产品时,只需将其推送到列表中即可。然后,您可以使用sort_by
对列表进行排序。
因此,在您的代码中,您拥有数组newproduct
,所以只需执行此操作:
products.each do |product|
data = product.split(",")
newproduct.push(Products.new(data[0], data[1], data[2], data[3]))
end
如果您想按价格排序:
newproduct.sort_by{|x| x.price}
答案 1 :(得分:1)
当然,有许多方法可以解决你所获得的任务,我认为你不是一个可行的解决方案。如果您确实在创建时确保实际保存了Products类,则可以使用可以使用的列表。
newproducts << Product.new(data[0], data[1], data[2], data[3])
您可能会注意到,我对您的语法进行了一些调整。我将产品类更改为产品,因为它只跟踪一个产品。然后我还将数组名称从newproduct更改为newproducts,因为这实际上是存储不同产品的地方。
之后,您有一个数组对象,您可以使用。
执行sort_by任务