我有一个接受带有splat运算符taken from this SO thread的多个数组的方法。
def interleave(a,*args)
max_length = args.map(&:size).max
padding = [nil]*[max_length-a.size, 0].max
(a+padding).zip(*args).flatten.compact
end
我有一个数组数组:
my_array = [[1,2],[3,4],[5,6]]
我如何通过
interleave(my_array)
以便它单独传递子阵列?我似乎无法将my_array
(其中可能有数百个)分成不同的对象。
答案 0 :(得分:3)
我认为您尝试做的事情可以通过在方法调用时使用splat运算符来完成,如下所示:
hello(*my_array)
这是一个完整的例子:
def foo(a, *b)
puts a.inspect
puts b.inspect
end
foo(*[[1, 2], [3, 4], [5, 6]])
打印以下内容:
[1, 2]
[[3, 4], [5, 6]]
修改:其他解决方案
现在你已经粘贴了我的观点,我认为应该重写该方法以获取单个参数,而不是在参数中使用splat运算符来提取first
和{{ 1}}。原因是如果多维数组的长度在运行时发生变化,那么最好不要在方法中拉出rest
和first
,这样你就不必使用splat无处不在。
rest