2012-05-30 9 views
8

Ho un array chiamato @friend_comparisons che è popolato con un numero di oggetti utente. Poi ordinare l'array usando la seguente:Ottenere un conteggio di elementi di matrice che soddisfano determinati criteri

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

Questa è l'ordinamento della matrice per un certo contatore associato a ogni utente (le specifiche di cui non sono importanti per la domanda).

Voglio scoprire quanti oggetti utente nella matrice hanno un contatore che è maggiore di un certo numero (diciamo 5). Come faccio a fare questo?

Ecco come Attualmente sto risolvere il 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

Ho bisogno di scorrere ogni elemento dell'array e controllare le condizioni e quindi aggiungere un segno di spunta ad un contatore se la condizione è incontrato o c'è un modo per farlo senza usare un contatore iterativo? – Alex

risposta

17

È possibile usare array # contano direttamente.

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

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

(lo stesso per ruby ​​1.9.3)

+1

Se '@ friend_comparisons' è una relazione ActiveRecord puoi (dovresti?) usare' size' invece di 'count' per evitare query non necessarie – akz92

Problemi correlati