В настоящее время я сталкиваюсь на этот вопрос Например, у меня есть этот массив хэшрубин Looking массив хэш-Performance
data = [
{:id => 1,:start_date => "2015-01-02",:end_date => "2015-01-05"},
{:id => 2,:start_date => "2015-01-06",:end_date => "2015-01-07"},
{:id => 3,:start_date => "2015-01-10",:end_date => "2015-01-20"}
]
Так что я хочу, чтобы найти точную хэш, которые имеют «2015-01-04» в диапазоне выше датой_начала хэшей и игровая end_date
Следуйте документ, который я узнать, есть 3 способа сделать это
1) Использование выберите
finding_hash = data.select {|h| h[:start_date] <= "2015-01-04" && h[:end_date] >= "2015-01-04"}
finding_hash возвращает массив необходимой хэш Но, как я это сделать, я уверяю, что там будет всегда только один хэш совпадает с условием сделать после того, как это сделать ВЫБРАТЬ я должен finding_hash.first
, чтобы получить хэш я хочу
2) Использование найти
finding_hash = data.find{|h| h[:start_date] <= "2015-01-04" && h[:end_date] >= "2015-01-04"}
Этот способ делать, то finding_hash IS результат хеширования мне нужно
3) Традиционные петлю
data.each do |t|
if (t[:start_date] <= "2015-01-04" && t[:end_date] >= "2015-01-04")
return t
break
end
end
Так какой из них самый быстрый способ сделать это. Мне нужна производительность, потому что мои данные довольно большие!
Спасибо и извините за мой плохой английский!
Если ваши данные довольно большие, вы должны бросить их в базу данных и проиндексировать. Даже SQLite, вероятно, съел бы что-то вроде этого. –
Можно ли предположить, что хеши в массиве отсортированы по дате? – spickermann
@spickermann: нет, это случайно мой друг –