创建两个包含最终添加了不同值的原始数组的数组

时间:2014-12-08 19:29:21

标签: ruby arrays

因此,我尝试通过从单个数组开始并将其拆分为单独的数组来构建多维数组,以考虑可能的附加值。

示例:

原始数组:[2,3]

添加4或5

新阵列:[[2,3,4],[2,3,5]]

我尝试了以下内容:

array=[2,3]
array1=array<<4
array2=array<<5

array=[2,3]
array1=array<<4
array.pop
array2=array<<5

array=[2,3]
array1=array.push 4
array.pop
array2=array.push 5

我得到的结果是:

[[2,3,4,5],[2,3,4,5]]
[[2,3,5],[2,3,5]]
[[2,3,5],[2,3,5]]

有没有办法只在新变量中改变原始数组,以便在我合并它们时变量不会相等?

3 个答案:

答案 0 :(得分:1)

Array上有许多方法是就地修饰符,即它们不能复制,而<<就是其中之一。

您可能会发现更容易:

array = [ 2, 3 ]
array1 = array + [ 4 ]
array2 = array + [ 5 ]

这种情况下的结果是两个独立的数组。

答案 1 :(得分:1)

另一种有趣的方法是使用splat运算符:

array = [2, 3]
array1 = [*array, 4]
# => [2, 3, 4]
array2 = [*array, 5]
# => [2, 3, 5]

答案 2 :(得分:0)

如果您有多次添加到:

array = [1, 2, 3]

说:

b = [*(4..20)]
  #=> [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

您可以使用方法Array#product

[array].product(b).map(&:flatten)
  #=> [[1, 2, 3,  4], [1, 2, 3,  5], [1, 2, 3,  6], [1, 2, 3,  7],
  #    [1, 2, 3,  8], [1, 2, 3,  9], [1, 2, 3, 10], [1, 2, 3, 11],
  #    [1, 2, 3, 12], [1, 2, 3, 13], [1, 2, 3, 14], [1, 2, 3, 15],
  #    [1, 2, 3, 16], [1, 2, 3, 17], [1, 2, 3, 18], [1, 2, 3, 19],
  #    [1, 2, 3, 20]]