Ecco una versione di steenslag di che funziona quando gli array non sono la stessa dimensione:
size = h.values.max_by { |a| a.length }.length
m = h.values.map { |a| a += [nil] * (size - a.length) }.transpose.insert(0, h.keys)
nil
sembra un segnaposto ragionevole per i valori mancanti, ma è possibile, di Certo, usa qualsiasi cosa abbia un senso.
Ad esempio:
>> h = {:a => [1, 2, 3], :b => [4, 5, 6, 7, 8], :c => [9]}
>> size = h.values.max_by { |a| a.length }.length
>> m = h.values.map { |a| a += [nil] * (size - a.length) }.transpose.insert(0, h.keys)
=> [[:a, :b, :c], [1, 4, 9], [2, 5, nil], [3, 6, nil], [nil, 7, nil], [nil, 8, nil]]
>> m.each { |r| puts r.map { |x| x.nil?? '' : x }.inspect }
[:a, :b, :c]
[ 1, 4, 9]
[ 2, 5, ""]
[ 3, 6, ""]
["", 7, ""]
["", 8, ""]
più semplice è un "doppio ciclo", ma è ancora una battuta; è così brutto? –
IMO è troppo specializzato per essere una funzione integrata e troppo facile da fare "a mano" :) –
Non sarebbe male per qualcuno pubblicare la semplice copertina. :-) – Larsenal