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 回答