2012-05-30 27 views
8

Tôi có một mảng được gọi là @friend_comparisons có nhiều đối tượng người dùng. sau đó tôi sắp xếp mảng bằng cách sử dụng như sau:Lấy tổng số mục mảng đáp ứng một tiêu chí nhất định

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

này được sắp xếp mảng bởi một bộ đếm nhất định gắn liền với mỗi người dùng (các chi tiết cụ thể trong số đó là không quan trọng đối với câu hỏi).

Tôi muốn tìm hiểu xem có bao nhiêu đối tượng người dùng trong mảng có bộ đếm lớn hơn một số nhất định (giả sử 5). Làm thế nào để tôi làm điều này?

Sau đây là cách tôi hiện đang giải quyết vấn đề:

@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

Tôi có cần phải lặp qua từng mục mảng và kiểm tra điều kiện và sau đó thêm một đánh dấu cho một bộ đếm nếu điều kiện là đã gặp hoặc là có một cách để làm điều này mà không cần sử dụng một truy cập lặp đi lặp lại? – Alex

Trả lời

17

Bạn có thể sử dụng mảng # đếm trực tiếp.

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

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

(tương tự cho ruby ​​1.9.3)

+1

Nếu '@ friend_comparisons' là một mối quan hệ ActiveRecord bạn có thể (nên?) sử dụng' kích thước' thay vì 'đếm' để tránh các truy vấn không cần thiết – akz92

Các vấn đề liên quan