2013-02-21 3 views
0

Проблема в том, что мне нужен массив из n элементов, в котором каждый элемент имеет 2 атрибута (цвет и имя). Я не думаю, что использование другого класса и создание каждого элемента объекта было бы лучшим способом.Альтернатива двумерному массиву Ruby Programming

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

Есть ли какие-либо вопросы или это риторическое? –

+0

Почему нерешительность для создания нового класса? Если вы хотите nitpick, то каждый элемент массива - это объект, независимо от того, что вы делаете, поскольку в ruby ​​нет примитивных типов не-объектов. –

ответ

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

+0

Вы должны вручную их создать. Поскольку комментарии отстойны, и я не могу добавить новые строки, вот суть: https://gist.github.com/nhocki/5002120 – Hock

1

Почему бы не просто создать хэш:

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

Согласен. В основном нет объектов с двумя свойствами, но имена объектов с цветом. Именно для этого и есть «Хэш». Чтобы прояснить вашу точку зрения, я бы улучшил ваше название: 'door'⇒'doors', поскольку в этом var хранится целая коллекция. – mudasobwa

0

Я не думаю, что [...] делая каждый элемент объекта будет лучшим способом.

Почему вы думаете, что? Это называется объектно-ориентированным программированием, а не массивно-ориентированным программированием по какой-либо причине!

Ruby - объектно-ориентированный язык. Объекты - это то, что он делает лучше всего.

Смежные вопросы