From: Felix Windt [mailto:fwmailinglists / gmail.com] 
# irb(main):002:0> b = [[], [], []]
# => [[], [], []]
# irb(main):003:0> a.inject(0){|bucket, item| b[bucket] << 
# item; bucket < 2 ? bucket + 1 : 0}
# => 0
# irb(main):004:0> b
# => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
# 
# Though I don't know if that would be considered elegant.

i would consider that as simple and elegant.

btw, in 1.9 there will be group_by and a with_index,
so hopefully,

a.group_by.with_index{|_,i| i%3}.values
=>[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

kind regards -botp