corrispondenza Ho il seguente array:Rubino enumerabile - trovare fino a n occorrenze di elemento
arr = [1, 3, 2, 5, 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 1, 5]
Voglio una matrice contenente i primi tre elementi dispari.
So che potrei fare questo:
arr.select(&:odd?).take(3)
ma voglio evitare scorrendo l'intero array, e invece tornare ancora una volta ho trovato la terza partita.
mi si avvicinò con la seguente soluzione, che a mio avviso fa quello che voglio:
my_arr.each_with_object([]) do |el, memo|
memo << el if el.odd?; break memo if memo.size == 3
end
ma c'è un modo più semplice/idiomatica di fare questo?
Ho confermato che 'force' funziona, ma non riesco a trovare la documentazione tranne quella in [ruby lang] (http://docs.ruby-lang.org/ja/2.1.0/method/Enumerator=3a= 3aLazy/i/force.html). Sai perché non è nella documentazione di RDoc? È perché è solo un alias di 'to_a'? – sawa
FYI - Potresti usare 'arr.lazy.select (&: odd?). First (3)' ed evitare il 'force' -' take' è pigro mentre 'first' no. – Myst
@sawa Non riesco a trovarlo neanche io. Se lo trovi, sentiti libero di modificare la mia risposta. –