我发现很多关于删除ruby中重复项的参考资料,但我找不到如何创建副本。
如果我有一个像[1,2,3]
这样的数组,我怎样才能将它映射到带有复制项的数组? [1,1,2,2,3,3]
有方法吗?
答案 0 :(得分:7)
试试这个
[1, 2, 3].flat_map { |i| [i, i] }
=> [1, 1, 2, 2, 3, 3]
答案 1 :(得分:3)
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]