2012-06-23 1 views
2

У меня есть массив хешей. Каждый хеш выглядит так:Как настроить структуру данных для эффективного поиска в Ruby?

'date'=>6/23/2011, value1=>6, value2=>8, value3=>3, value4=>6 

В массиве имеется около 10 000 элементов хэша.

Есть встроенный способ в Руби эффективно находки индекса элемента по дате? Я знаю, что есть Array.index, но он последовательно перебирает массив?

Есть ли лучший способ настроить мои данные так, чтобы к ним можно было получить доступ эффективно?

Рубин 1.9.3

+1

Каждый раз, когда вы говорите «массив», вы теряете скорость поиска, потому что вам нужно выполнить сортировку перед тем, как искать, или вам нужно выполнить последовательный поиск. Подумайте об использовании хэшей в любое время, когда вы захотите выполнить поиск. –

ответ

11

Это звучит, как вы делаете это в обратном направлении. Вы должны иметь хэш массивов:

{'6/23/2011' => [6, 8, 3, 6]} 

Таким образом, учитывая дату, у вас есть доступ к постоянная времени к соответствующим данным. Это также дает вам более чистый доступ к значениям, а не неуклюжий материал valueX.

+0

Это правильный ответ. +1 – nickgroenke

+0

Может также работать хэш хешей - я подозреваю, что 'значение *' являются заполнителями для более значимых имен. –

+0

Согласно [этому вопросу] (http://stackoverflow.com/questions/11169791/how-to-iterate-over-part-of-a-hash-in-ruby), это то, что использует OP прямо сейчас. – steenslag