ruby中数组的重复元素

我找到了很多关于删除ruby中的重复项的参考,但我找不到如何创建重复。

如果我有一个类似[1,2,3]的数组,我如何将它映射到带有复制项的数组? [1,1,2,2,3,3]

有方法吗?

试试这个

 [1, 2, 3].flat_map { |i| [i, i] } => [1, 1, 2, 2, 3, 3] 

这是另一种方法,使用Array#new直接创建数组:

 array = [1, 2, 3] repetitions = 2 p Array.new(array.size * repetitions) { |i| array[i / repetitions] } # [1, 1, 2, 2, 3, 3] 

根据fruity ,@ ursus的回答,@ ilya的前两个答案与我的表现相当。 transpose.flatten比其他任何一个慢。

@Ursus答案是最干净的,有可能的解决方案:

 a = [1, 2, 3] a.zip(a).flatten #=> [1, 1, 2, 2, 3, 3] 

要么

 a.inject([]) {|a, e| a << e << e} # a.inject([]) {|a, e| n.times {a << e}; a} => [1, 1, 2, 2, 3, 3] 

要么

 [a, a].transpose.flatten # ([a] * n).transpose.flatten => [1, 1, 2, 2, 3, 3] 

试试这个:

 [1, 2, 3] * 2 => [1, 2, 3, 1, 2, 3] 

您可能希望它排序:

 ([1, 2, 3] * 2).sort => [1, 1, 2, 2, 3, 3]