2007年12月18日

[ruby-list:44358] Re: 配列のシャッフル

前原です。

多くの方からアドバイスを頂き,ありがとうございます。
やっと理解することができたと思います。

On Tue, 18 Dec 2007 11:22:52 +0900,
Maehara Masahide (前原正英) <maehrm@xxxxx> wrote:

> 最初,aの要素は,5個あるので,collect は5回実行されると思うので,
> a.slice!(rand(a.length)) を5回繰り返してみました。

以下の私の実行例だと,(*)の部分以下がダウトですね。

> ====================================================================
> irb(main):027:0> a = [1,2,3,4,5]
> => [1, 2, 3, 4, 5]
> irb(main):028:0> a.slice!(rand(a.length))
> => 4
> irb(main):029:0> a
> => [1, 2, 3, 5]
> irb(main):030:0> a.slice!(rand(a.length))
> => 5
> irb(main):031:0> a
> => [1, 2, 3]
> irb(main):032:0> a.slice!(rand(a.length))
> => 1
> irb(main):033:0> a
> => [2, 3]

(*)
ここの時点で,aの長さが2になっており,collect できない!
私が最初,勘違いをしたのは,collect は,しだいに減っていく a に対して
新たに実行されていくものと思っていました。
このような理解をしたのですが,よろしいでしょうか?

> irb(main):034:0> a.slice!(rand(a.length))
> => 3
> irb(main):035:0> a
> => [2]
> irb(main):036:0> a.slice!(rand(a.length))
> => 2
> irb(main):037:0> a
> => []
> irb(main):038:0>
> ====================================================================

P.S.
『The Ruby Way』の載っていたサンプルは,誤植だったのでしょうか?
--
前原 正英(Maehara Masahide)<maehrm@xxxxx>
宮崎県立佐土原高等学校/情報技術科
http://www.miyazaki-c.ed.jp/sadowara-th/
GPG Fingerprint: 17A6 8B1C 1186 1B45 41AE 5BBB CE42 E9EA 69A2 5844

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




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