Ruby中的有序数组重复
返回: [1,1,2,2,3,3] 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名成员?我敢打赌,这类人可能比天真的人更糟糕。是
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]