将Ruby数组转换为对象实例

时间:2014-11-13 13:45:30

标签: ruby arrays object

我为假公寓制作了一个阵列生成器来填充公寓:

["53 York Street", 7995, true, 123, 2, 1, "Tommy Gough"]
["53 York Street", 18070, true, 278, 2, 1, "Sarah Stewart"]

但我想将每个实例变成一个对象实例,我试图找出一个.each循环(或其他)方法来做到这一点。我还没有找到一种方法来编写一个不使用字符串输出的方法...但我可能会错了。

1 个答案:

答案 0 :(得分:1)

假设您想要实例的类看起来像这样:

Apartment = Struct.new(:street, :code, :field3, :field4, :field5, :field6, :name)

(我不知道其他领域代表什么。)

并说你的输入如下:

input = [
  ["53 York Street", 7995, true, 123, 2, 1, "Tommy Gough"],
  ["53 York Street", 18070, true, 278, 2, 1, "Sarah Stewart"]
]

然后你可以创建一个像这样的实例数组:

output = input.map { |entry| Apartment.new(*entry) }

注意splat(*)将(内部​​)数组扩展为可以传递给构造函数的方法参数列表。写这个的更详细的方法是:

output = []
input.each do |entry|
  output << Apartment.new(*entry)
end