Rubyproduct方法在字符串数组的情况下表现不同

根据官方文档

[1,2].product([3,4],[5,6])
=> [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]

返回所有数组中元素的所有组合的数组。
然而,

first_array = ["orange", "purple", "colour-black"]
other_arrays = [["sputter", "ribus"], ["incontinentia", "portia"]]
@end_array = first_array.product(other_arrays)

返回,意外:

[["orange", ["sputter", "ribus"]], ["orange", ["incontinentia", "portia"]], ["purple", ["sputter", "ribus"]], ["purple", ["incontinentia", "portia"]], ["colour-black", ["sputter", "ribus"]], ["colour-black", ["incontinentia", "portia"]]]

为什么 ruby​​ 的行为不同?怎样做才能得到设计的结果?

回答

[1,2].product([3,4],[5,6])

这一行将两个参数传递给.product.

@end_array = first_array.product(other_arrays)

这条线是通过一个单一的参数.product,这恰好是一个数组的数组。现在这个结果有意义吗?它相当于:

[1,2].product([[3,4],[5,6]])

您可以使用splat 运算符( *)将数组解构为单独的参数:

first_array = ["orange", "purple", "colour-black"]
other_arrays = [["sputter", "ribus"], ["incontinentia", "portia"]]
@end_array = first_array.product(*other_arrays)

=> [["orange", "sputter", "incontinentia"],
 ["orange", "sputter", "portia"],
 ["orange", "ribus", "incontinentia"],
 ["orange", "ribus", "portia"],
 ["purple", "sputter", "incontinentia"],
 ["purple", "sputter", "portia"],
 ["purple", "ribus", "incontinentia"],
 ["purple", "ribus", "portia"],
 ["colour-black", "sputter", "incontinentia"],
 ["colour-black", "sputter", "portia"],
 ["colour-black", "ribus", "incontinentia"],
 ["colour-black", "ribus", "portia"]]


以上是Rubyproduct方法在字符串数组的情况下表现不同的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>