获取满足特定条件的数组项的计数

时间:2012-05-30 21:43:15

标签: ruby-on-rails-3

我有一个名为@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

2 个答案:

答案 0 :(得分:22)

您可以直接使用Array#count。

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

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

(与ruby 1.9.3相同)

答案 1 :(得分:13)

数组#select将完成工作。

文档:http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-select

您可能会这样做:

number_of_users = @friend_comparisons.select{|friend| friend.counter >= 5 }.size