ruby中数组的重复元素

时间:2017-03-21 20:47:46

标签: ruby

我发现很多关于删除ruby中重复项的参考资料,但我找不到如何创建副本。

如果我有一个像[1,2,3]这样的数组,我怎样才能将它映射到带有复制项的数组? [1,1,2,2,3,3]

有方法吗?

4 个答案:

答案 0 :(得分:7)

试试这个

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

答案 1 :(得分:3)

@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]

答案 2 :(得分: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比其他任何人都慢。

答案 3 :(得分:-2)

试试这个:

[1, 2, 3] * 2

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

您可能希望对其进行排序:

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

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