[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

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

From: cuzic <cuzic@...>
Date: 2006-06-22 13:28:43 UTC
List: ruby-list #42453
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@ruby-lang.org> wrote:

> From: Yoshihiro Sugihara <jinnee@tt.rim.or.jp>
> 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@cuzic.com>
プログラミングは素晴らしい http://www.cuzic.com/



In This Thread

Prev Next