Ruby - 通过乘以一组出现来创建数组

Tom*_*Tom 4 ruby arrays

我想创建一个大小为100的数组,使得值将出现在另一个数组中定义的X个出现次数.

所以下面的数组:

arr1 = ['text1', 'text2', 'text3', 'text4', 'text5', 'text6']
arr2 = [5, 5, 10, 10, 20, 50] 
Run Code Online (Sandbox Code Playgroud)

将创建一个包含5倍值'text1',50倍值的新数组'text6'等.

Urs*_*sus 7

试试这个吧

arr1.zip(arr2).flat_map { |s, n| Array.new(n) { s } }
Run Code Online (Sandbox Code Playgroud)

我首先将每个字符串与其整数配对,然后迭代这些对并创建n次字符串s的数组.flat_map而不是简单map的做法就是没有多维数组.


daw*_*awg 6

你可以做:

arr1.zip(arr2).map {|s,x| [s]*x}
Run Code Online (Sandbox Code Playgroud)

这将产生一个带有子阵列的数组[[s,s,s..],[s2,s2,s2...]].如果您不希望每个字符串都在一个单独的子数组中:

arr1.zip(arr2).flat_map {|s,x| [s]*x}
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,zip并且transpose是等效的,所以你可以这样做:

[arr1, arr2].transpose.flat_map { |s,x| [s] * x }
Run Code Online (Sandbox Code Playgroud)

  • 继@ muistooshort的观点,如果你认为`flat_map`在这里比'flatten'更好(我怀疑你这样做),为什么不去掉`flatten`线呢?"谁提出了什么"是无关紧要的; 只要给出最好的答案,纳入其他人提出的有价值的建议. (2认同)