Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自两个不同大小数组的Ruby数组?_Ruby_Arrays_Hash_Map_Elements - Fatal编程技术网

来自两个不同大小数组的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

我有两个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
只返回第一个结果。我还有其他选择吗

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的回答。它们都起了作用,非常有用。