logo       

[ruby-list:42453] Re: rubyで多次元配列の作り方: msg#00107

lang.ruby.japanese

Subject: [ruby-list:42453] Re: rubyで多次元配列の作り方

cuzic です。

求めるものかどうかは分かりませんが、Ruby では、
def [] x,y
end

def []= x,y,value
end
といった形式によって、[] メソッドを再定義可能です。
これを用いれば多次元配列のように動作するクラスを作成可能です。

エラーハンドルを全く行っていませんが下記のサンプルが参考になるでしょうか?

class MultiArray
def initialize *arg
@nsize = arg
length = 1
arg.each do |i|
length * i
end
@length = length
@data = Array.new(@length)
end

def [] *arg
pos = 0
@nsize.zip(arg) do |length,i|
pos = pos * length + i
end
@data[pos]
end

def []= *arg
pos = 0
@nsize.zip(arg[0,@nsize.length]) do |length,i|
pos = pos * length + i
end
@data[pos] = arg[-1]
end
end

if $0 == __FILE__
a = MultiArray.new(2,4,6)

l = 0
0.upto(1) do |i|
0.upto(3) do |j|
0.upto(5) do |k|
a[i,j,k] = l
l += 1
end
end
end

0.upto(1) do |i|
0.upto(3) do |j|
0.upto(5) do |k|
print "#{a[i,j,k]} "
end
puts
end
puts
end
end

でわ。

On Thu, 22 Jun 2006 20:14:58 +0900
rubikitch <rubikitch-X+L+6nJQZ58h9ZMKESR00Q@xxxxxxxxxxxxxxxx> wrote:

> From: Yoshihiro Sugihara <jinnee-DFxqcuf94YLbmG5+kqVDhQ@xxxxxxxxxxxxxxxx>
> Subject: Re: [ruby-list:42447] Re: rubyで多次元配列の作り方
> Date: Thu, 22 Jun 2006 19:52:26 +0900 (JST)
>
> > > http://raa.ruby-lang.org/list.rhtml?name=narray
> >
> > マップデータ用の2次元平面に必要なクラスオブジェクトを格納したいので
> > 用途が違うかな、と思いましたが
> > Element types: Integer, Float, Complex and Ruby Object.
> > って書いてありますね。
>
> その通り、任意のRubyオブジェクトを格納できます。
>
> > > hs[[i,j]]=i+j
> >
> > すみません、これが良く判りませんでした。[i,j]がArrayになっている
> > んでしょうか?
>
> そうです。
> [i,j]はArrayなので、hsはArrayをkeyとしたHashなのです。
> 外側の[]は Hash#[]= (つまりHashへのペアの格納)を意味しています。
>
> スペースをあけて書くとわかりやすいでしょうか?
>
> hs[ [i,j] ] = i+j
>
> 一方、くっつけて書くと多次元配列という気持ちがでてくるので好みの問題でしょうか。
>
> --
> rubikitch
> http://www.rubyist.net/~rubikitch/
>

--
cuzic <tomoya-aCX0bSSNUHYAvxtiuMwx3w@xxxxxxxxxxxxxxxx>
プログラミングは素晴らしい http://www.cuzic.com/






<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise