2011-10-05 9 views
12

Spesso desidero eseguire un'azione su un array X volte, quindi restituire un risultato diverso da quel numero. Il codice che di solito scrivo è il seguente:Modo pulito per restituire un array da X. x. in Ruby

def other_participants 
    output =[] 
    NUMBER_COMPARED.times do 
     output << Participant.new(all_friends.shuffle.pop, self) 
    end 
    output 
    end 

C'è un modo più pulito per fare ciò?

+0

Giuro questo non è per la reputazione, ma credo davvero che è stata accettata la risposta sbagliata. Collezionare è davvero ESATTAMENTE quello giusto da usare. Anche se fai un'altra risposta e accetti quella, penso davvero che dovresti accettare una mappa/raccogliere la risposta per quando arriva qualcun altro e guarda questa domanda. – xaxxon

+0

Ho pensato la stessa cosa dopo aver sperimentato così ho cambiato il programmatore imperativo –

risposta

19

suona come se fosse possibile utilizzare map/collect (sono sinonimi su Enumerable). restituisce una matrice con il contenuto che rappresenta il ritorno di ogni iterazione attraverso la mappa/raccolta.

def other_participants 
    NUMBER_COMPARED.times.collect do 
    Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

Non è necessaria un'altra variabile o un'istruzione di reso esplicita.

http://www.ruby-doc.org/core/Enumerable.html#method-i-collect

6

Si potrebbe utilizzare each_with_object:

def other_participants 
    NUMBER_COMPARED.times.each_with_object([]) do |i, output| 
    output << Participant.new(all_friends.shuffle.pop, self) 
    end 
end 

Dal fine manual:

each_with_object (obj) {| (* args), memo_obj | ...} → obj
each_with_object (obj) → an_enumerator

Itera il blocco specificato per ogni elemento con un oggetto arbitrario proposta, e restituisce l'oggetto inizialmente determinato.
Se non viene fornito alcun blocco, restituisce un enumeratore.

+2

! Rot in silicon inferno! –

+2

@Andrew: scendi dal mio ragazzo di prato! –

0

mi cosa simile a questa è la cosa migliore

def other_participants 
    Array.new(NUMBER_COMPARED) { Participant.new(all_friends.shuffle.pop, self) } 
end 
Problemi correlati