0
我在数组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
但似乎很慢,并且使用了大量的内存。我该如何改进?
除了(为此[可枚举# find](http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-find)就是答案,如@Ursus所示),有一些事情比较突出:1)'ID_ obj_by_name',因为它以大写字母开头,是一个常量。你不能使用赋值在一个方法内创建一个常量:'def a; A = 1;结束#=> SyntaxError:动态常量赋值。做那个(说)'id_obj_by_name'。 2)Ruby惯例是将* snake case *用于变量和方法的名称:'by_name'而不是'byName'。你不必遵循这个惯例,但我们99%的人都这么做。 (续)... –
... 3)您的方法必须位于未指定的类中,因为无法从“顶级”访问类变量(@@对象)。因此,您应该将该方法包装在类定义中。 –