【问题标题】:How to splice array and merge back如何拼接数组并合并回来
【发布时间】:2019-03-16 15:52:21
【问题描述】:

假设我有一个像这样的二维数组:

[ 3,    4,   8,   12 ]
[ 2,    6,   7,   16 ]
[ 1,   10,  11,   15 ]
[ 5,    9,  13,   14 ]

我想将shift6[1][1] 和unshift 转换为[2][1],以便我得到以下信息:

[ 3,    4,   8,    12 ]
[ 2,    7,   11,   16 ]
[ 1,    6,   10,   15 ]
[ 5,    9,   13,   14 ]

我想我会 splice(1,1) 在第二个和第三个数组上得到:

a: [6, 7]
b: [10, 11]

然后做:

b.unshift(a.shift)
a << b.pop

【问题讨论】:

  • 是的,很抱歉这是个意外。它与红宝石有关
  • 在您的示例中,您似乎正在“旋转”子数组 [[6,7], [10,11]] 的元素,但没有说明这一点。请详细说明。如果您将[i,j] 的元素移动到[k,l],[k,l] 是否有任何限制?例如,必须k=i 或l=j?
  • 我对这个问题投了反对票。您在下面的评论中明确表示您希望将上面的第一个数组转换为第二个数组;不是一般的解决方案,而是这两个特定的数组。您不需要使用代码来操作第一个数组,只需将第二个数组编写为文字,就像编写第一个数组一样。

标签: ruby algorithm multidimensional-array


【解决方案1】:

给定这个数组:

ary = [
        [ 3,    4,   8,   12 ],
        [ 2,    6,   7,   16 ],
        [ 1,   10,  11,   15 ],
        [ 5,    9,  13,   14 ]
      ]

你可以通过并行赋值来做到这一点:

ary[2][1], ary[1][1], ary[2][2], ary[1][2] = ary[1][1], ary[1][2], ary[2][1], ary[2][2]

也许你可以把它变成一个方法。

【讨论】:

  • 多重赋值是正式名称,顺便说一句:docs.ruby-lang.org/en/2.5.0/syntax/…
  • 谢谢,我非常欣赏 Ruby 中的这个概念。太方便了!
  • 这仅适用于特定示例。那有什么意义呢?您也可以将新数组构造为文字。问题的本质是如何对任意数组和数组中的任意一对位置做到这一点。
  • @CarySwoveland 问题是,我实际上打算随意做这件事。但这超出了这个问题的范围。我可以创建另一个针对任意大小的问题
猜你喜欢
  • 2018-10-19
  • 2021-10-30
  • 2021-12-16
  • 2020-06-11
  • 1970-01-01
  • 2021-08-31
  • 2021-01-04
  • 2015-11-19
  • 1970-01-01
相关资源
最近更新 更多