2006年7月 7日

[ruby-list:42558] Re: Array#default

たけ(tk)です

[ruby-list:42556] Re: Array#default にて
"ARAI Shunichi" さん曰く:

> > まあ、既に自前のライブラリにしてしまったので、標準でなくても困らないので
> > すが、何で Hash で出来て、Array では出来ないのだろう? という疑問です。

> いや、Arrayには初期化されていない項というのはないんですよ。
> a = [0,1,2,3,nil,5]
> というのがあったとして、a[4]は初期化されてないわけではなくて
> nilが入っているわけです。

なかなか微妙な考え方の違いが Hash と Array との間にはあるということです
ね。

----
array = []
hash = {}

p array[1] #=> nil
p hash[1] #=> nil
----

は、両方とも、初期化されていないnil。

----
array = []
hash = {}

array[2] = nil
hash[2] = nil

p array[1] #=> nil
p hash[1] #=> nil
----

は、Arrayは nil が入っているnilで、Hashは初期化されていないnil。
見た目は似ているが、考え方が違う、と・・。

> だから、もしa[100] = 100とかして100に代入した場合、
> 6から99にも値を入れて初期化しなければならないわけです。
>
> もしその間の値が存在しないまま使いたいのであれば、
> Hashを使うのが適当ということになります。

たしかに、オブジェクトを残さずにエクセルにピンポイントでアクセスする
[ruby-list:42557] などはHashの方が良いかもしれませんね。

----
・・・
array = Hash.new(){|a,n|
a[n] = Hash.new(){|aa,nn|
@workbook.worksheets(1).cells(n+1,nn+1)
}
}

・・・

p array

#=> {5=>{}, 6=>{}, 1=>{}, 7=>{}, 8=>{}, 9=>{}, 4=>{}, 10=>{}}
----

* まだすっきりしたわけではないので、もう少し考えてみよう・・。

* 二次元(多次元)的なイメージにオブジェクトを配置する場合には、二重配
列の方がすっきりするのだが、二重ハッシュであっても同様だと考えることがで
きる。二次元イメージの全てにオブジェクトを配置するにはArrayが適している
が、離散的に配置したいのであれば、Hashを使うべき、ということか・・。なん
となく了解かも・・。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


投稿者 xml-rpc : 2006年7月 7日 18:00
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/41468
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。