【问题标题】:How to expand a two dimentioanl array [closed]如何扩展二维数组[关闭]
【发布时间】:2018-07-24 15:29:37
【问题描述】:

有没有简单的方法可以在二维 ruby​​ 数组周围填充零?

1 1 4
1 6 9
2 6 5

到这里

0 0 0 0 0
0 1 1 4 0
0 1 6 9 0
0 2 6 5 0
0 0 0 0 0 

【问题讨论】:

  • 你能把这段文字转换成 Ruby 代码吗?
  • @Stefan 希望您将示例的输入和输出编写为 Ruby 对象。我同意。这使它更清晰,并允许读者剪切和粘贴来测试他们的代码。例如,您可以编写 arr = [[1, ,1, 4], [1, 6, 9], [2, 6, 5]] 并显示所需的返回值是 [[0, 0, 0, 0, 0], [0, 1, 1, 4, 0],...]。将变量(此处为 arr)分配给输入对象并不是必需的,但它允许读者在答案和 cmets 中引用变量而无需定义它。请进行编辑以进行必要的更改。您甚至可能会取消对问题的保留。

标签: arrays ruby multidimensional-array


【解决方案1】:

以下 Ruby onlineer 应该可以解决问题。

array = [[1, 1, 4], 
         [1, 6, 9], 
         [2, 6, 5]] 

result = [Array.new(array.size + 2, 0)] + array.map{|subarr| [0] + subarr + [0]} + [Array.new(array.size + 2, 0)]

希望这会有所帮助。

【讨论】:

  • Array.new(array[0].size + 2, 0)] 会更好
  • @Santhosh 谢谢,我会相应地改变它。
【解决方案2】:
arr = [[1, 1, 4], 
       [1, 6, 9], 
       [2, 6, 5]] 

以下内容避免了检查边界情况的需要。

Array.new(arr.size+2) { |i| Array.new(arr.first.size+2, 0) }.tap { |a|
  arr.size.times { |i| arr.first.size.times { |j| a[i+1][j+1] = arr[i][j] } } }

  #=> [[0, 0, 0, 0, 0],
  #    [0, 1, 1, 4, 0],
  #    [0, 1, 6, 9, 0],
  #    [0, 2, 6, 5, 0],
  #    [0, 0, 0, 0, 0]]

请参阅文档以了解类方法 Array::new 和实例方法 Object#tap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2020-09-25
    • 2011-04-13
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多