2013-02-18 82 views
0

我有一個多維數組這樣的:分割和合並多維數組紅寶石

@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 

現在我將合併到這樣的結果:

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

我曾經10列splited這陣

# 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 

要做到這一點的最佳方法是什麼? 任何幫助將高度讚賞

+1

請不要使用實例變量,你不需要他們。我敢打賭@tmp可能是一個局部變量。 – reto 2013-02-18 14:20:31

回答

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"]]] 
+0

我們其中一個人不理解OP的問題:)(可能是我)。感謝您提出轉置,這是一個很好的例子! – reto 2013-02-18 14:49:35

+0

正是我所需要的。謝謝 ! – Abuzed 2013-02-18 14:53:58

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? 

請注意,有時這些漂亮的函數式編程範式導致尷尬的解決方案。如果「命令式」編程的東西稍長一些,但要清楚得多。

+0

感謝您的重播和竅門。 這項工作很好,只有一行值。 但我不知道我有多少行和列(由用戶定義) – Abuzed 2013-02-18 14:30:29

+0

您能否用另一個例子來擴展您的問題?最簡單的就是兩個例子:之前和之後。 – reto 2013-02-18 14:48:04