Ruby:如何在数组中重复/乘法元素?

时间:2017-06-26 10:00:50

标签: arrays ruby

假设我有一个数组:

array = ["A", "B", "C"]

...我需要重复每个元素5次,以获得这个:

array2 = ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C"]

以下是我使用的代码:

arr = ["A", "B", "C"] 
arr2 = [] 
arr.each do |a| 
  5.times do 
    arr2.push(a) 
  end 
end 

但我只是好奇,有没有办法在一行代码中做同样的事情

5 个答案:

答案 0 :(得分:4)

试试这个

Show

答案 1 :(得分:1)

具有硬编码重复次数的缺点的解决方案:

array.zip(array, array, array, array).flatten

更新

正如@knut建议的那样(谢谢!),可以使用asterisk operator使其动态化:

array.zip(*[array]*4).flatten

它看起来不错而且有效但是,总而言之,我认为@Ursus提供的the solution工作速度更快,使用的内存比任何使用Array#zip的解决方案都少,无论其参数列表如何是生成的。

答案 2 :(得分:1)

另一种方式:

(arr*5).sort_by { |i| arr.index(i) }
#=> ["A", "A", "A", "A", "A",
#    "B", "B", "B", "B", "B",
#    "C", "C", "C", "C", "C"] 

警告:假设arr.uniq == arr

答案 3 :(得分:0)

我认为你可以使用嵌套循环。一个接一个地接受A,B,C,D和E以及在同一字母表中将新数组附加5次迭代(最好是for循环迭代)的in循环。我认为这应该工作,应该为您节省更多的时间和代码行和运行时间。

问题:(虽然修辞)如果你想对A-Z的字母表做同样的事情,你会手动输入元素吗?

答案 4 :(得分:0)

另一个单行,只是为了好玩:

([array] * 5).transpose.flatten
=> ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C"]