Если позволяет производительность, будет работать ассоциированный массив.Ассоциативный массив - это массив массивов, каждый из которых содержит два элемента:
a = [
[:x, 1],
[:y, 2],
[:z, 3],
]
. Вы можете использовать assoc
для поиска подмассива по его первому элементу:
p a.assoc(:x) # [:x, 1]
p a.assoc(:x).last # 1
Или rassoc
для поиска подмассива по последнему элементу:
p a.rassoc(2) # [:y, 2]
p a.rassoc(2).first # :y
Будет ли этот подход работать для вас, зависит от размера списка и частоты поиска.Это.На моей машине поиск последнего элемента в списке из 1000 элементов занимает около 100 микросекунд.
Другой подход заключается в использовании простого неупорядоченного (в Ruby <= 1.8.7) хэша: </p>
h = {
:x => 1,
:y => 2,
:z => 3,
}
И заказывайте его во время выполнения операции, в которой порядок имеет значение:
sorted_h = h.sort_by do |key, value|
key.to_s
end.each do |key, value|
p [key, value]
end
# [:x, 1]
# [:y, 2]
# [:z, 3]
Этот подход хорош для алфавитного или числового упорядочения (например).Это не очень хорошо для порядка вставки.