あ伊藤@山形大学です。
Matrix の話題を見ていて思い出したのですが、ruby で
多次元の配列が取りにくくて困ったことがあります。
a[2][5] = "foo"
みたいなことをしたい場合に、あらかじめ
a = []
0.upto(10) { |i|
a[i] = []
}
としておくか、あるいは
a = []
...
a[2] = [] if a[2].nil?
a[2][5] = "foo"
のようにつかわないといけないような気がしています。
こういうときに便利な書き方はあるのでしょうか?
ない場合のために(^_^; こんなクラスを書いているのですが、
どんなもんでしょう?
# multi-dimensional array
class Marray
def initialize(dim,arr=[])
@dim = dim
@array = arr
end
def [] (n)
if @dim == 1 then
return @array[n]
elsif @array[n].nil? then
@array[n] = []
end
return Marray.new(@dim-1,@array[n])
end
def []= (n,v)
@array[n] = v
end
end
昔の perl のように、添字を文字列に直して hash で
アクセスしたほうが速いのかなあ。
--
aito