0

私はそのような多次元配列を持っています:

original_array[0] = Array(20 elements) # Titles
original_array[1] = Array(20 elements) # Values

私はこの配列をこれまでに10列に分割しました:

@splited_array = Array.new
@original_array.each do |elem|
  @tmp = Array.new
  elem.each_slice(10) do |row|
    @tmp << row
  end
  @splited_array << @tmp
end

# Result:
# splited_array[0][0] => labels 1 to 9
# splited_array[0][1] => labels 10 to 19
# splited_array[1][0] => values 1 to 9
# splited_array[1][1] => values 10 to 19

ここで、この結果にマージします。

# splited_array[0][0] => labels 1 to 9
# splited_array[0][1] => values 1 to 9
# splited_array[1][0] => labels 10 to 19
# splited_array[1][1] => values 10 to 19

これを行うための最良の方法は何ですか?どんな助けでも大歓迎です

4

2 に答える 2

1

これはより機能的なアプローチです

original = []
original[0] = %W(aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt)
original[1] = %W(01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20)

result = original.map {|arr| arr.each_slice(10).to_a}.transpose
=> [[["aa", "bb", "cc", "dd", "ee", "ff", "gg", "hh", "ii", "jj"],
     ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10"]],
    [["kk", "ll", "mm", "nn", "oo", "pp", "qq", "rr", "ss", "tt"],
     ["11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]]]
于 2013-02-18T14:47:54.030 に答える
0

何かのようなもの:

a1 = (1..10).to_a
a2 = ("A".."J").to_a

out = []
current = []
a1.zip(a2) do |a, b|
  current << a
  current << b

  if current.length >= 10
    out << current
    current = []
  end
end


out << current unless current.empty?

これらの優れた関数型プログラミングのパラダイムは、扱いにくいソリューションにつながる場合があることに注意してください。「命令的に」プログラムされた何かがもう少し長いが、より明確である場合は、それを選択してください。

于 2013-02-18T14:19:02.737 に答える