From: Maehara Masahide (=?iso-2022-jp?B?GyRCQTA4NkA1MVEbKEI=?=) Date: 2007-12-18T11:49:36+09:00 Subject: [ruby-list:44358] Re: 配列のシャッフル 前原です。 多くの方からアドバイスを頂き,ありがとうございます。 やっと理解することができたと思います。 On Tue, 18 Dec 2007 11:22:52 +0900, Maehara Masahide (前原正英) 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) 宮崎県立佐土原高等学校/情報技術科 http://www.miyazaki-c.ed.jp/sadowara-th/ GPG Fingerprint: 17A6 8B1C 1186 1B45 41AE 5BBB CE42 E9EA 69A2 5844