1

计算集合时。通过大小或计数来做更好吗?

大小 = 红宝石 ( @foobars.size)

计数 = SQL ( @foobars.count)

我还注意到,count再次访问数据库。

4

2 回答 2

5

我倾向于建议使用size一切,只是因为它更安全。人们使用size.

以下是它们的工作方式:

length:length 将返回数组中元素的数量,或者以其他方式加载的集合 - 关键是无论如何都会在此处加载集合。因此,如果您正在使用 activerecord 关联,它会将元素从 DB 拉到内存中,然后返回数字。

count:count 发出一个数据库查询,所以如果你已经有一个数组,那么它对你的数据库的调用是毫无意义的。

size: 两全其美 - size 检查您正在使用的类型,然后使用看起来更合适的类型(因此,如果您有一个数组,它将使用长度;如果您有一个未检索的ActiveRecord::Association,它将使用计数,等等)。

来源: http ://blog.hasmanythrough.com/2008/2/27/count-length-size/

于 2012-08-10T03:35:12.530 回答
0

这取决于实际情况。在您展示的示例中,我将使用它,size因为您已经加载了集合,并且调用size将只检查数组的长度。正如您所注意到的,count将执行额外的数据库查询,您真的想避免这种情况。

但是,在您只想显示 Foobar 的数量而不显示这些对象的情况下,我会选择它,count因为它不会将实例加载到内存中,只返回记录的数量。

于 2012-08-10T01:57:58.823 回答