Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 - Fatal编程技术网

Ruby中的有序数组重复

Ruby中的有序数组重复,ruby,arrays,Ruby,Arrays,返回: [1,1,2,2,3,3] Ruby有内置的或更快的方法来实现这一点吗 x = [] a = [1,2,3] a.each{|i| x<<i; x<<i} 或者,如果你需要重复n次 从技术上讲,每个_与_对象: a.zip(*[a]*(n-1)).flatten 一般而言: a.each_with_object([]){|e, acc| n.times{acc << e}} 这是不公平的。只有3名成员?我敢打赌,这类人可能比天真的人更糟糕。是

返回:

[1,1,2,2,3,3]

Ruby有内置的或更快的方法来实现这一点吗

x = []
a = [1,2,3]
a.each{|i| x<<i; x<<i}
或者,如果你需要重复n次

从技术上讲,每个_与_对象:

a.zip(*[a]*(n-1)).flatten
一般而言:

a.each_with_object([]){|e, acc| n.times{acc << e}}

这是不公平的。只有3名成员?我敢打赌,这类人可能比天真的人更糟糕。是的,这是千真万确的。这就是为什么我把它作为本案的赢家。它确实是本案的赢家,但这个基准毫无意义。即使只有3个成员和a=[3,2,1],排序也会比每个成员慢。没有必要比较代码的性能,因为保持原始顺序与排序的效果不同。我认为您应该在问题的末尾添加基准测试结果,而不是将其作为单独的答案发布。
a.zip(*[a]*(n-1)).flatten
a.each_with_object([]){|e, acc| n.times{acc << e}}
Benchmark.measure{1000000.times{x=[]; a.each{|i| x<<i; x<<i}}}
1.530000   0.000000   1.530000 (  1.552974)

Benchmark.measure{1000000.times{a.zip(a).flatten}}
4.140000   0.000000   4.140000 (  4.136788)

Benchmark.measure{1000000.times{a.collect{|i| [i, i]}.flatten}}
4.150000   0.000000   4.150000 (  4.158172)
Benchmark.measure{1000000.times{(a*2).sort}}
1.170000   0.000000   1.170000 (  1.173677)
a = [1, 2, 3]
n = 2

a.flat_map {|i| [i]*n} # => [1, 1, 2, 2, 3, 3]