2012-05-30 53 views
8

我有一個名爲@friend_comparisons的數組,它填充了許多用戶對象。我然後使用以下對數組進行排序:獲取滿足一定標準的數組項目數

@friend_comparisons.sort! { |a,b| b.completions.where(:list_id => @list.id).first.counter <=> a.completions.where(:list_id => @list.id).first.counter } 

這是通過排序與每個用戶相關聯的特定計數器的陣列(其細節並非的問題是重要的)。

我想知道數組中有多少個用戶對象有一個大於某個數的計數器(比方說5)。我該怎麼做呢?

這裏是我當前如何解決這個問題:

@friends_rank = 1 
for friend in @friend_comparisons do 
    if friend.completions.where(:list_id => @list.id).first.counter > @user_restaurants.count 
    @friends_rank = @friends_rank + 1 
    end 
end 
+0

我需要通過每個數組項迭代和檢查情況,然後剔添加到計數器,如果條件是遇到或有沒有辦法做到這一點,而不使用迭代計數器? – Alex

回答

17

您可以使用陣列#直接計數。

@friend_comparisons.count {|friend| friend.counter >= 5 } 

文檔:http://ruby-doc.org/core-2.2.0/Array.html#method-i-count

(同爲紅寶石1.9.3)

+1

如果'@ friend_comparisons'是一個ActiveRecord關係,你可以(應該?)使用'size'而不是'count'來避免不必要的查詢 – akz92