Ruby 2D索引器

时间:2013-10-29 11:01:12

标签: ruby arrays indexing

如何使用以下类实现正确的2D索引器?以下是我的第一次拍摄

class MyArray

  #init 2D array, set all elements at 0
  def initialize(size)
    @array = []
    0.upto(size - 1) {|x|
      @array[x] = []
      0.upto(size - 1) {|y|
        @array[x][y] = 0
      }
    }
  end

  def [](*args)
    @array[args[0]][args[1]]
  end

  def []=(*args)
    @array[args[0]][args[1]] = args[2]
  end

end

它适用于

test = MyArray.new(3)
test[1, 1] = 5

但我想让它也适用于

test[1][1] = 5

现在给出了编译错误

  

在`[]'中:没有从nil到整数的隐式转换(TypeError)

[]方法中。

1 个答案:

答案 0 :(得分:2)

我怀疑在Ruby中是否需要一个类来完成该任务。创建和索引2d数组是ruby非常简单:

1.9.3p194 :001 > a = Array.new(3){[]}  #create a array with 3 rows
 => [[], [], []]  
1.9.3p194 :002 > a[1][2]=3             #assignment
 => 3 
1.9.3p194 :003 > a[1][2]               #index 
 => 3 
1.9.3p194 :004 > a
 => [[], [nil, nil, 3], []]