[#38724] 祝日判定用メソッド — Take_tk <ggb03124@...>

たけ(tk)です

19 messages 2003/11/02

[#38756] ruby-dev summary 21730-21822 /draft — Minero Aoki <aamine@...>

青木です。

14 messages 2003/11/05

[ruby-list:38723] 多重配列のコンストラクタ ← 多重配列

From: Take_tk <ggb03124@...>
Date: 2003-11-02 04:40:20 UTC
List: ruby-list #38723
たけ(tk)です。

[ruby-list:38722] Re: 多重配列 にて 
小西 弘将 <konishih@fd6.so-net.ne.jp> さん 曰く:
> >岩月と申します。
> >irb(main):001:0> a = Array.new(3) { Array.new(3, 0) }
> なるほど、構築時のディープコピーに今ひとつしっくりした方法を思いつかず、
> ちょっと不満を抱いていたところでした。

ちょっと工夫して、オブジェクトの共有にならない多重配列用のコンストラクタ
を作ってみました。ディープコピーもできるようです。

----
#! ruby -Ks
#-- Array_new2.rb
#-- Array_new2.pi

#-- オブジェクトの共有にならない多重配列のコンストラクタ
#-- [ruby-list:38720]

class Array
def self.new2(arr,d=nil,args=[],&block)
  arr = arr.dup
  n = arr.shift
  return Array.new(n){|x| self.new2(arr,d,args+[x],&block) } unless arr.empty?
  return Array.new(n){|x| block.call(*(args+[x]))} unless d
  return Array.new(n,d) unless block
  raise(ArgumentError,"block with default")
end
end

if __FILE__ == $0
#-- create n dimension array with block
p Array.new2([9,9]){|x,y| (x+1)*(y+1) }
p Array.new2([2,2,2]){|x,y,z| (x+1)*(y+2)*(z+3) }
#-- create n dimension array with default
p Array.new2([2,2,2],2)
#-- deep copy
a = Array.new2([2,2,2]){|x,y,z| (x+1)*(y+2)*(z+3) }
b = Array.new2([2,2,2]){|x,y,z| a[x][y][z] }
p a,b
end
----

take_tk = kumagai hidetake

In This Thread