@ Джон рассказал вам, как извлечь нужный хеш. Если вы хотите сделать это несколько раз, для разных значений ключа name
, вам следует рассмотреть возможность создания единовременного хэша для ускорения поиска.
SUPPLIERS = [
{ name: "FunePlus", advitam_grade: 3, works: [ { type: "embalming", price: 350 },
{ type: "transport_before_casketing", price: 450} ]},
{ name: "FuneTop", works: [ { type: "graving", price: 10 } ]},
{ name: "FuneTruc", advitam_grade: 5, works: [ { type: "embalming", price: 750 }]},
{ name: "FuneCorp", advitam_grade: 2, works: [ { type: "digging", price: 350 }]}
]
class SelectSupplier
@supplier_index = SUPPLIERS.each_with_index.with_object({}) { |(g,i),h| h[g[:name]] = i }
def self.global_grade(name)
SUPPLIERS[@supplier_index[name]]
end
end
SelectSupplier.global_grade("FunePlus")
#=> {:name=>"FunePlus", :advitam_grade=>3, :works=>[{:type=>"embalming", :price=>350},
# {:type=>"transport_before_casketing", :price=>450}]}
Хеш @supplier_index
равен следующему.
SelectSupplier.instance_variable_get(:@supplier_index)
#=> {"FunePlus"=>0, "FuneTop"=>1, "FuneTruc"=>2, "FuneCorp"=>3}
Обратите внимание, что я мог бы создать @supplier_index
со значениями, равными элементам SUPPLIERS
(хэши), но это увеличило бы требования к памяти (что, конечно, не может быть проблемой).