配列内にいくつかのオブジェクトがありますobjects
。特定のプロパティと値のペアを指定すると、これに一致する最初のオブジェクトを返す関数が必要です。たとえば、objects.byName "John"
と指定した場合、最初のオブジェクトはname: "John"
で返されます。配列からいくつかの特性を満たすオブジェクトを取得する
現在、私はこれやってる:
def self.byName name
ID_obj_by_name = {}
@@objects.each_with_index do |o, index|
ID_obj_by_name[o.name] = index
end
@@objects[ID_obj_by_name[name]]
end
をしかし、それは非常に遅いようで、多くのメモリを使用しています。これをどのように改善できますか?
別にあなたの質問(のための[可算#からの@Ursusで示されているように、[find](http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-find)が答えです)、いくつかのことが際立ちます:1) 'ID_ obj_by_name'は、大文字で始まるので、定数です。代入を使ってメソッド内で定数を作成することはできません: 'def a; A = 1; end#=> SyntaxError:動的定数の代入。それを 'id_obj_by_name'としましょう。 2)1つのRubyのコンベンションでは、変数名とメソッド名に「蛇の場合」*を使用することができます。「byName」ではなく「by_name」です。あなたはその大会に従う必要はありませんが、私たちの99%以上はそうします。 (cont。)... –
... 3)あなたのメソッドは、クラス変数(@@ objects)は "トップレベル"からアクセスすることができないので、未指定のクラス内になければなりません。したがって、メソッドをクラス定義にラップする必要があります。 –