2013-02-21 21 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是一種面向對象的語言。對象是它最擅長的。