Necessità di dividere gli array in sotto-array di dimensioni specificate in Ruby

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]]