将要作为多个对象传递给方法的数组数组分开

时间:2014-11-13 19:22:34

标签: ruby arrays

我有一个接受带有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(其中可能有数百个)分成不同的对象。

1 个答案:

答案 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}}。原因是如果多维数组的长度在运行时发生变化,那么最好不要在方法中拉出restfirst,这样你就不必使用splat无处不在。

rest