Forse sto fraintendendo il QUESTI da quando l'altra risposta è già accettata, ma sembrava che tu volessi dividere l'array in 3 gruppi uguali, indipendentemente dalla dimensione di ogni gruppo, piuttosto che dividerlo in N gruppi di 3 come fanno le risposte precedenti. Se questo è quello che stai cercando, Rails (ActiveSupport) ha anche un metodo chiamato in_groups:
a = [0,1,2,3,4,5,6]
a.in_groups(2) # => [[0,1,2,3],[4,5,6,nil]]
a.in_groups(3, false) # => [[0,1,2],[3,4], [5,6]]
Io non credo che ci sia un rubino equivalente, tuttavia, è possibile ottenere circa gli stessi risultati con l'aggiunta di questo metodo semplice:
class Array; def in_groups(num_groups)
return [] if num_groups == 0
slice_size = (self.size/Float(num_groups)).ceil
groups = self.each_slice(slice_size).to_a
end; end
a.in_groups(3) # => [[0,1,2], [3,4,5], [6]]
l'unica differenza (come potete vedere) è che questo non si diffonderà lo "spazio vuoto", in tutti i gruppi; ogni gruppo, ma l'ultimo è di dimensioni uguali, e l'ultimo gruppo contiene sempre il resto più tutto lo "spazio vuoto".
Aggiornamento: Come @rimsky acutamente indicate, il metodo di cui sopra non comporta sempre il numero corretto di gruppi (talvolta creerà più "gruppi vuoti" alla fine, e lasciare fuori). Ecco una versione aggiornata, ridotta da ActiveSupport's definition che espande gli extra per riempire il numero richiesto di gruppi.
def in_groups(number)
group_size = size/number
leftovers = size % number
groups = []
start = 0
number.times do |index|
length = group_size + (leftovers > 0 && leftovers > index ? 1 : 0)
groups << slice(start, length)
start += length
end
groups
end
possibile duplicato di [Come dividere (pezzo) una matrice di Ruby in parti di elementi di X?] (Http://stackoverflow.com/questions/2699584/how-to-split-chunk-a-ruby -array-in-parts-of-x-elements) –
È spiacevole che l'esempio scelto abbia lo stesso risultato per "dividere in 3 gruppi" e "dividere in gruppi di 3 elementi", ecco perché hai ottenuto due risposte completamente diverse. – tokland