From: aito@...5nazha.yz.yamagata-u.ac.jp (Akinori ITO) Date: 1997-05-23T12:38:14+09:00 Subject: [ruby-list:3015] Multi-dimensional array あ伊藤@山形大学です。 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