如何在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |