Skip to content

[RoR] length, count and size 差別是什麼?

Published: at 02:49 PM (4 min read)

TL;DR: 如果你總是遇到不知道該用 count, length 或 size,那你可以照下面簡單的步驟依序選擇哪個最適合你目前的應用場景

  1. 你是否只需要獲得當前物件的數量,如果是,那你應該使用 size
  2. 除了數量外,你是否還需要存取當前物件的內容,如果是,那你應該使用 length
  3. 除了以上,你還需要根據條件來計算物件的數量,那你應該使用 count

Note: 以上建議由 1 至 3 做選擇,在多數應用上,效能會是 size >= length >= count

由於這三個方法在不同的物件實作上會有所不同,因此我們將分成 ArrayCollectionAssociation/ActiveRecord 來說明這三個方法究竟有哪些差別

Array

[ 1, 2, 3, 4, 5 ].length   #=> 5
[].length                  #=> 0
[ 1, 2, 3, 4, 5, 1 ].count                #=> 6
[ 1, 2, 3, 4, 5, 1 ].count(1)             #=> 2
[ 1, 2, 3, 4, 5, 1 ].count { |x| x >= 3 } #=> 3

CollectionAssociation/ActiveRecord

最後,附上簡單的一張流程圖,希望可以幫助你更快速的選擇該使用哪個方法

How to choose length, count and size

參考資料