2013-10-13 68 views
1

我已經如下所示的daystrips,以及一週的兩個三天紅寶石陣列:來自兩個不同大小數組的Ruby數組?

days = ["Monday", "Tuesday", "Wednesday","Thursday","Friday","Saturday","Sunday"] 

而且公共汽車時刻表這裏:

trips = [ 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm", 
    "2.35pm","4.50pm","7.00pm" 
] 

結果我想要實現這個:

Bus-times = [ 
    "Monday","2.35pm","4.50pm","7.00pm", 
    "Tuesday","2.35pm","4.50pm","7.00pm", 
    "Wednesday","2.35pm","4.50pm","7.00pm", 
    "Thusday","2.35pm","4.50pm","7.00pm", 
    "Friday","2.35pm","4.50pm","7.00pm", 
    "Saturday","2.35pm","4.50pm","7.00pm", 
    "Sunday""2.35pm","4.50pm","7.00pm" 
] 

我已經看了交織,並zip只返回的第一個結果我我不寫我自己的功能。我還有什麼其他選擇?

+0

你'trips'無效。請張貼真正有意義的代碼。 – sawa

+0

行程數組已被更正,謝謝觀察。 –

+0

'Bus-times'不能作爲變量名稱使用。 Ruby會認爲你正從一個常量或名爲'Bus'的類中減去一個名爲'times'的變量。無論如何,你的代碼在那個時候會爆炸。 –

回答

4
bus_times = days.zip(trips.each_slice(3)).flatten 

,或者如果你想保持他們作爲一個數組的數組:

bus_times = days.zip(trips.each_slice(3)).map(&:flatten) 
0

這裏是代碼:

trips.each_slice(3).flat_map.with_index(0){|a,i| a.unshift(days[i])} 

,或者

[days,trips.each_slice(3).to_a ].transpose.flatten 

輸出

[ 
    "Monday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Tuesday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Wednesday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Thursday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Friday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Saturday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm", 
    "Sunday", 
    "2.35pm", 
    "4.50pm", 
    "7.00pm" 
] 

基準

require 'benchmark' 

days = ["Monday", "Tuesday", "Wednesday","Thursday","Friday","Saturday","Sunday"] 
trips= ["2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm","2.35pm","4.50pm","7.00pm"] 


n = 50000 
Benchmark.bm(7) do |x| 
    x.report("ZIP") { n.times{days.zip(trips.each_slice(3)).flatten} } 
    x.report("MAP") { n.times{trips.each_slice(3).flat_map.with_index(0){|a,i| a.unshift(days[i])}} } 
    x.report("TRANSPOSE") { n.times{[days,trips.each_slice(3).to_a ].transpose.flatten} } 
end 

結果

   user  system  total  real 
ZIP  0.800000 0.000000 0.800000 ( 0.798833) 
MAP  0.600000 0.000000 0.600000 ( 0.597299) 
TRANSPOSE 0.820000 0.000000 0.820000 ( 0.826408) 
+0

謝謝hirolua和Arup Rashit尋求答案。他們都工作並且非常有用。 –

+0

你應該接受其中之一作爲答案。 –

相關問題