来自两个不同大小数组的Ruby数组?
我有两个Ruby数组,分别是来自两个不同大小数组的Ruby数组?,ruby,arrays,hash,map,elements,Ruby,Arrays,Hash,Map,Elements,我有两个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.00p
天
和行程
,以及如下所示的每周天数:
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
只返回第一个结果。我还有其他选择吗
bus_times = days.zip(trips.each_slice(3)).flatten
或者,如果要将它们保留为数组的数组,请执行以下操作:
bus_times = days.zip(trips.each_slice(3)).map(&:flatten)
或者,如果要将它们保留为数组的数组,请执行以下操作:
bus_times = days.zip(trips.each_slice(3)).map(&:flatten)
代码如下:
trips.each_slice(3).flat_map.with_index(0){|a,i| a.unshift(days[i])}
或者
输出
[
"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"
]
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)
基准
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
结果
[
"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"
]
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)
代码如下:
trips.each_slice(3).flat_map.with_index(0){|a,i| a.unshift(days[i])}
或者
输出
[
"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"
]
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)
基准
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
结果
[
"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"
]
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)
您的
trips
无效。请发布真正有意义的代码。trips数组已更正,感谢您的观察。总线时间
将不能作为变量名使用。Ruby会认为您正在从常量或名为Bus
的类中减去名为的变量times
。在任何情况下,您的代码都会在该点爆炸。您的trips
无效。请发布真正有意义的代码。trips数组已更正,感谢您的观察。总线时间
将不能作为变量名使用。Ruby会认为您正在从常量或名为Bus
的类中减去名为的变量times
。在任何情况下,您的代码都会在这一点上爆炸。感谢hirolua和Arup Rashit提供的答案。它们都很有效,非常有用。谢谢hirolua和Arup Rashit的回答。它们都起了作用,非常有用。