替代二维数组Ruby编程

时间:2013-02-21 04:14:56

标签: ruby arrays class attributes

问题在于我需要一个包含n个元素的数组,其中每个元素都有2个属性(颜色和名称)。 我不认为使用另一个类并使每个元素成为对象将是最好的方法。

class House
    def initialize
        @door=Array.new
        ...
    end
    ...
end

house=House.new
...
puts house.door[i].color
puts house.door[i].name

另一种方法是使用二维数组,其中:

house.door[i][0] would be house.door[i].name
house.door[i][1] would be house.door[1].color

但我仍然认为这些不是正确的方法。

4 个答案:

答案 0 :(得分:2)

如果它是一个简单的脚本/程序,我会使用Struct.new(..)

你可以:

Door = Struct.new(:name, :color)
door = Door.new("name", "blue")
door.color # => "blue"
door.name  # => "name"

答案 1 :(得分:1)

为什么不创建一个哈希:

door = Hash.new
door[name] = color

答案 2 :(得分:0)

我会使用OpenStruct,让您免于设计类。

house.door[0] = OpenStruct.new(color:'red', name:'Front Door')
house.door[0].color

答案 3 :(得分:0)

  

我不认为将每个元素作为对象是最好的方法。

你为什么这么认为?它被称为面向对象编程而不是面向数组的编程是有原因的!

Ruby是一种面向对象的语言。物体是它最擅长的。