假设我有一个数组:
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
但我只是好奇,有没有办法在一行代码中做同样的事情?
答案 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"]