2012-05-30 12 views
8

Tengo una matriz llamada @friend_comparisons que se completa con una serie de objetos de usuario. entonces ordenar la matriz utilizando la siguiente:Obtención de un conteo de elementos de matriz que cumplen ciertos criterios

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

Esta es la clasificación de la matriz por un cierto contador asociado a cada usuario (los detalles de los cuales no son importantes para la pregunta).

Quiero saber cuántos objetos de usuario en la matriz tienen un contador que es mayor que un cierto número (digamos 5). ¿Cómo hago esto?

Aquí es como yo soy la solución actualmente el problema:

@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

¿Es necesario iterar a través de cada elemento de la matriz y compruebe el estado y luego añadir una señal a un contador si la condición es se reunió o hay una manera de hacerlo sin usar un contador iterativo? – Alex

Respuesta

17

Puede utilizar matriz # cuentan directamente.

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

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

(las mismas para Ruby 1.9.3)

+1

Si '@ friend_comparisons' es una relación de ActiveRecord puede (¿debería?) usar' size' en lugar de 'count' para evitar consultas innecesarias – akz92

Cuestiones relacionadas