计算集合时。通过大小或计数来做更好吗?
大小 = 红宝石 ( @foobars.size
)
计数 = SQL ( @foobars.count
)
我还注意到,count
再次访问数据库。
计算集合时。通过大小或计数来做更好吗?
大小 = 红宝石 ( @foobars.size
)
计数 = SQL ( @foobars.count
)
我还注意到,count
再次访问数据库。
我倾向于建议使用size
一切,只是因为它更安全。人们使用size
.
以下是它们的工作方式:
length
:length 将返回数组中元素的数量,或者以其他方式加载的集合 - 关键是无论如何都会在此处加载集合。因此,如果您正在使用 activerecord 关联,它会将元素从 DB 拉到内存中,然后返回数字。
count
:count 发出一个数据库查询,所以如果你已经有一个数组,那么它对你的数据库的调用是毫无意义的。
size
: 两全其美 - size 检查您正在使用的类型,然后使用看起来更合适的类型(因此,如果您有一个数组,它将使用长度;如果您有一个未检索的ActiveRecord::Association
,它将使用计数,等等)。
来源: http ://blog.hasmanythrough.com/2008/2/27/count-length-size/
这取决于实际情况。在您展示的示例中,我将使用它,size
因为您已经加载了集合,并且调用size
将只检查数组的长度。正如您所注意到的,count
将执行额外的数据库查询,您真的想避免这种情况。
但是,在您只想显示 Foobar 的数量而不显示这些对象的情况下,我会选择它,count
因为它不会将实例加载到内存中,只返回记录的数量。