Ho una matrice che è qualcosa di simile a questo:
arr = [4, 5, 6, 7, 8, 4, 45, 11]
Voglio un metodo di fantasia come
sub_arrays = split (arr, 3)
Questo dovrebbe restituire quanto segue: [[4, 5, 6], [7,8,4], [45,11]]
arr.each_slice(3).to_a
each_slice
restituisce un Enumerable, quindi se questo è abbastanza per te, non è necessario chiamare to_a
.
Nel 1.8.6 devi fare:
require 'enumerator' arr.enum_for(:each_slice, 3).to_a
Se hai solo bisogno di iterare, puoi semplicemente fare:
arr.each_slice(3) do |x,y,z| puts(x+y+z) end
può anche utilizzare questo con uno scopo specifico:
((1..10).group_by {|i| i%3}).values #=> [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]
nel caso in cui desideri solo due array partizionati:
(1..6).partition {|v| v.even? } #=> [[2, 4, 6], [1, 3, 5]]
Se usi Rails 2.3+ puoi fare qualcosa del genere:
arr.in_groups(3, false)
Acquista i documenti API
In Rails è ansible utilizzare il metodo in_groups_of
che suddivide un array in gruppi di dimensioni specificate
arr.in_groups_of(3) # => [[4, 5, 6], [7, 8, 4], [45, 11, nil]] arr.in_groups_of(3, false) # => [[4, 5, 6], [7, 8, 4], [45, 11]]
Mentre il metodo in_groups
divide una matrice in un numero specificato di gruppi bilanciati
arr.in_groups(5) # => [[4, 5], [6, 7], [8, 4], [45, nil], [11, nil]] arr.in_groups(5, false) # => [[4, 5], [6, 7], [8, 4], [45], [11]]