[ruby-list:3015] Multi-dimensional array

From: aito@...5nazha.yz.yamagata-u.ac.jp (Akinori ITO)
Date: 1997-05-23 03:38:14 UTC
List: ruby-list #3015
あ伊藤@山形大学です。

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


In This Thread