2013-02-21 63 views
0

问题是我需要一个n元素数组,其中每个元素都有2个属性(颜色和名称)。 我不认为使用另一个类并将每个元素作为对象将是最好的方法。二项数组的替代Ruby编程

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 

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

+0

那里有什么问题或者是否有这种修辞? – 2013-02-21 07:37:04

+0

为什么犹豫要创建一个新班级?如果你想挑选数组,那么无论你做什么,数组中的每一项都是一个对象,因为在ruby中没有原始的非对象类型 – 2013-02-21 09:03:28

回答

2

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

你可以有:

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

我会用OpenStruct,从设计一类为您节省。

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

我该怎么做才能让整个数组属于这个OpenStruct?我的意思是,通过这种方式,你必须将每个元素初始化为OpenStruct。 – Quarktum 2013-02-21 04:28:50

+0

你必须手动构建它们。由于意见很糟糕,我不能添加新行,这里有一个要点:https://gist.github.com/nhocki/5002120 – Hock 2013-02-21 04:41:15

1

为什么不只是创建一个哈希:

door = Hash.new 
door[name] = color 
+0

我同意。基本上不存在具有两个属性的对象,而是具有颜色的命名对象。这正是'Hash'的作用。为了澄清你的观点,我会改进你的命名:'door'⇒'doors',因为整个集合都存储在该var中。 – mudasobwa 2013-02-21 07:38:06

0

我不认为[...]使每个元素的对象将是最好的方式。

你为什么这么认为?这就是所谓的面向对象的编程,而不是面向数组的编程。

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