Если вы хотите найти хеш для одного значения "id"
, то вам, очевидно, необходимо выполнить линейный поиск.С другой стороны, если вы хотите выполнить несколько поисков для различных значений "id"
, то вам будет разумно создать хеш с соответствующими ключами.
rules = [{
"id" => "artist_name",
"type" => "string",
"field" => "artist_name",
"input" => "text",
"value" => "Underoath",
"operator" => "contains"
},
{
"id" => "bpm",
"type" => "integer",
"field" => "bpm",
"input" => "number",
"value" => 100,
"operator" => "greater"
}]
h = rules.each_with_index.with_object({}) { |(g,i),h| h[g["id"]] = i }
#=> {"artist_name"=>0, "bpm"=>1}
Значения h
являются индексами элементов (хэшей) rules
.Следовательно, хэш для "id"=>"bpm"
равен
rules[h["bpm"]
#=> {"id"=>"bpm", "type"=>"integer", "field"=>"bpm", "input"=>"number",
# "value"=>100, "operator"=>"greater"}
. Я мог бы сделать значения h
самих элементов rules
, но для этого потребовалось бы больше памяти без значительного улучшения времени поиска.
Из вопроса не ясно, может ли значение "id"
быть одинаковым для двух или более элементов rules
.В этом случае у h
будет меньше ключей, чем у rules
элементов, но формулировка вопроса предполагает, что можно выбрать любой хэш из тех, у которых одинаковое значение "id"
.