我想创建一个大小为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'等.
试试这个吧
arr1.zip(arr2).flat_map { |s, n| Array.new(n) { s } }
Run Code Online (Sandbox Code Playgroud)
我首先将每个字符串与其整数配对,然后迭代这些对并创建n次字符串s的数组.flat_map而不是简单map的做法就是没有多维数组.
你可以做:
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)