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]