Esiste un modo più breve per trovare il primo elemento di un incontro matrice alcune condizioni rispetto a questo:primo elemento di un array con condizione di
my_array[ my_array.index {|x| x.some_test} ]
Esiste un modo più breve per trovare il primo elemento di un incontro matrice alcune condizioni rispetto a questo:primo elemento di un array con condizione di
my_array[ my_array.index {|x| x.some_test} ]
Prova questo:
my_array.find{|x| x.some_test }
O qui è una scorciatoia (grazie @LarsHaugseth per ricordare a questo proposito)
my_array.find(&:some_test)
per quanto mi trovo sembra complicato. Come mi aspetto di ricevere più di un oggetto per tale richiesta.
Preferisco utilizzare detect
per ottenere uno distinto.
E select
per trovarli tutti.
qui quello docs rubino dice su di loro:
detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source
find(ifnone = nil) {| obj | block } → obj or nil
detect(ifnone = nil) → an_enumerator
find(ifnone = nil) → an_enumerator
Passaggi ogni voce enum per bloccare. Restituisce il primo per il quale il blocco non è falso. Se nessun oggetto corrisponde, chiama ifnone e restituisce il suo risultato quando viene specificato, o restituisce altrimenti.
find_all {| obj | block } → array click to toggle source
select {| obj | block } → array
find_all → an_enumerator
select → an_enumerator
restituisce un array contenente tutti gli elementi della enum per i quali blocco non è falso
trovare/rilevare, mappare/raccogliere, ridurre/iniettare - c'è un metodo per tutti :) –
Per me, 'detect' non sembra affatto un metodo corretto. 'find' almeno può * trovare * e restituire qualcosa. Cosa 'rileva' fa e restituisce - Non ho idea senza consultare i documenti. –
Tuttavia, la comunità di rubini si è basata principalmente su 'find'. Una buona ragione per cambiare. – pguardiario
Può essere accorciato a 'my_array.find (&: some_test)' –
@LarsHaugseth: Hai ragione, naturalmente. Grazie. –