【问题标题】:Trouble with arrays in Ruby [duplicate]Ruby中的数组问题[重复]
【发布时间】:2019-02-17 09:59:35
【问题描述】:

我创建一个数组并编辑值:

arr = Array.new(6, Array.new(2, '0'))
arr[0][0] = 'name'
arr[1][0] = 'id'
arr[2][0] = 'type'
arr[3][0] = 'sum'
arr[4][0] = 'partner'
arr[5][0] = 'time'

然后我有这个数组:

[["time", "0"], ["time", "0"], ["time", "0"], ["time", "0"], ["time", "0"], ["time", "0"]]

当我需要这个时:

[["name", "0"], ["id", "0"], ["type", "0"], ["sum", "0"], ["partner", "0"], ["time", "0"]]

我做错了什么?

【问题讨论】:

标签: arrays ruby


【解决方案1】:

根据 Ruby 数组文档:

http://ruby-doc.org/core-2.5.1/Array.html

Note that the second argument populates the array with references to the same object. Therefore, it is only recommended in cases when you need to instantiate arrays with natively immutable objects such as Symbols, numbers, true or false.

这解释了为什么

arr[0][0] = 'name'

将所有键设置为相同的值。在你的情况下,最后一个获胜,所以它的time

你真正想要达到什么目的?设置默认值?如果是这样,请使用块语法来预填充您的数组,例如:

 arr = Array.new(6) { [2, '0'] }

【讨论】:

  • 我正在尝试创建一个包含成对值的数组。每次我使用arr[0][0] = 'name' 之类的东西设置值时,我在 ruby​​ 中的二维数组都会遇到同样的问题。我认为这是使用二维数组的错误方法,但我还没有找到任何其他方法。
  • @M.Sakovich 首先,Ruby 中没有二维数组,只有数组数组;也许是一个小问题,但它是意外引用共享的真正问题的基础。如果您想创建一个数组数组,请按照 Cody 的建议使用 Array.new 的块形式:Array.new(n) { [ ] }
【解决方案2】:
arr = Array.new(6){Array.new(2,'0')}
arr[0][0] = 'pan'
arr[1][0] = 'id'
arr[2][0] = 'type'
arr[3][0] = 'sum'
arr[4][0] = 'partner'
arr[5][0] = 'time'
puts arr

试试这个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2013-10-05
    • 2019-07-28
    • 1970-01-01
    • 2022-01-03
    • 2013-03-09
    相关资源
    最近更新 更多