我想在
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。