[#5219] ruby for perl users — Noritsugu Nakamura <nnakamur@...>

35 messages 1997/11/09
[#5220] Re: ruby for perl users — tateishi@... (Tateishi Takaaki) 1997/11/09

立石です。

[#5224] Re: ruby for perl users — shugo@... (Shugo Maeda) 1997/11/09

前田です。

[#5243] read from subprocess — Kikutani Makoto <kikutani@...>

きくたにです。

17 messages 1997/11/10
[#5250] Re: read from subprocess — matz@... (Yukihiro Matsumoto) 1997/11/11

まつもと ゆきひろです

[#5300] Win32用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...>

はじめまして、竹林といいます。

14 messages 1997/11/15
[#5302] Re: Win32用の Rubyでの tkの使用 — WATANABE Hirofumi <eban@...> 1997/11/15

わたなべです.

[#5303] Re: Win32 用の Rubyでの tkの使用 — Tomoaki Takebayashi <tota@...> 1997/11/15

[#5305] Re: Win32 用の Ruby での tk の使用 — aito@...5sun.yz.yamagata-u.ac.jp 1997/11/17

あ伊藤です.

[#5320] ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

20 messages 1997/11/18
[#5337] Re: ruby 1.0-971118 released — WATANABE Hirofumi <watanabe@...> 1997/11/19

わたなべです.

[#5340] Re: ruby 1.0-971118 released — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#5398] 配列への追加について — a-nisida@... (西田明良)

はじめまして、西田@初心者 と申します。m(..)m

16 messages 1997/11/22

[ruby-list:5401] Re: 配列への追加について

From: shugo@... (Shugo Maeda)
Date: 1997-11-22 09:42:00 UTC
List: ruby-list #5401
前田です。

In message "[ruby-list:5398] 配列への追加について"
西田明良 <a-nisida@post.co.jp> wrote:

|下の様にイテレータの中で 簡単なテキスト処理をした結果を連想配列にしたも
|のを、array に << で追加したいのですが、何故か array の要素が 全部最後
|に追加したものになってしまいます。つまり p array の結果が、
|
|  [{"c"=>"3", "a"=>"1", "b"=>"2"}, {"c"=>"7", "a"=>"9", "b"=>"8"}]
|
|と、なってほしいのですが、
|
|  [{"c"=>"7", "a"=>"9", "b"=>"8"}, {"c"=>"7", "a"=>"9", "b"=>"8"}]
|
|となってしまうのですが、いったい どこが、いけないのでしょうか?

eachのイテレータブロックが2回目に評価される時,hash.clearした
時点でarrayの内容も

[{"c"=>"3", "a"=>"1", "b"=>"2"}]

から

[{}]

になってしまいます。
その後,hash[name]=valueで,

[{"c"=>"7", "a"=>"9", "b"=>"8"}]

となります。

これはarrayの第1要素とhashが同じオブジェクトを指しているからです。

data=["a=0;b=2;c=3","a=9;b=8;c=7"]
array=[]

data.each do |x|
  hash = {}
  tmp=x.split(';')
  tmp.each do |y|
    name , value = y.split('=')
    hash[name]=value
  end
  array << hash
end

p array

のようにhashをイテレータブロックのローカル変数にすれば解決します。
# tmpもイテレータブロックの外で初期化する必要はありません。

-- 
前田 修吾

In This Thread