加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Ruby中声明二维数组

发布时间:2020-12-17 04:19:28 所属栏目:百科 来源:网络整理
导读:我想在 Ruby中使用二维数组,我可以像下面这样访问: if @array[x][y] == "1" then @array[x][y] = "0" 问题是:我不知道数组维度的初始大小,并且我增长了数组(使用运算符). 如何将其声明为实例变量,所以我没有这样的错误? undefined method `[]' for nil:Ni
我想在 Ruby中使用二维数组,我可以像下面这样访问:
if @array[x][y] == "1" then @array[x][y] = "0"

问题是:我不知道数组维度的初始大小,并且我增长了数组(使用<<运算符). 如何将其声明为实例变量,所以我没有这样的错误?

undefined method `[]' for nil:NilClass (NoMethodError)

问题更新:

@array = Array.new {Array.new}

现在对我有用,所以下面马特的评论是正确的!

我刚刚发现我收到错误的原因是因为我迭代了这个数组:

for i in 0..@array.length
    for j in 0..@array[0].length
        @array[i][j] ...

这显然是错误的,并产生了错误.必须是这样的:

for i in 0..@array.length-1
        for j in 0..@array[0].length-1
            @array[i][j] ...

解决方法

使用嵌套Hashes的稀疏二维数组的简单实现,
class SparseArray
  attr_reader :hash

  def initialize
    @hash = {}
  end

  def [](key)
    hash[key] ||= {}
  end

  def rows
    hash.length   
  end

  alias_method :length,:rows
end

用法:

sparse_array = SparseArray.new
sparse_array[1][2] = 3
sparse_array[1][2] #=> 3

p sparse_array.hash
#=> {1=>{2=>3}}

#
# dimensions
#
sparse_array.length    #=> 1
sparse_array.rows      #=> 1

sparse_array[0].length #=> 0
sparse_array[1].length #=> 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读