gpt4 book ai didi

ruby - 如何在 Ruby 中声明一个二维数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:50 29 4
gpt4 key购买 nike

我想要一个 Ruby 中的二维数组,我可以像这样访问它:

if @array[x][y] == "1" then @array[x][y] = "0"

问题是:我不知道数组维度的初始大小并且我增长了数组(使用 << 运算符)。

如何将它声明为实例变量,这样我就不会出现这样的错误?

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

问题已更新:

@array = Array.new {Array.new} 

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

我刚刚发现我收到错误的原因是因为我像这样遍历数组:

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] ...

最佳答案

使用嵌套哈希的稀疏二维数组的简单实现,

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

关于ruby - 如何在 Ruby 中声明一个二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com