From: Maehara Masahide (=?iso-2022-jp?B?GyRCQTA4NkA1MVEbKEI=?=) Date: 2007-12-18T09:30:02+09:00 Subject: [ruby-list:44352] 配列のシャッフル 前原と申します。 現在,『The Ruby Way』を読んでいるのですが,その中で以下のような配列の シャッフルについての記述があります。 =============================================================== class Array def randomize! result = collect { slice!(rand(length)) } replace result end def randomize arr = self.dup arr.randomize! arr end end a = [1, 2, 3, 4, 5] p a.randomize! =============================================================== 上記を実行すると,以下のようになり,配列の要素2つ分が表示されません。 =============================================================== % ruby array_randomize.rb [1, 4, 3] % ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux] =============================================================== 『Ruby レシピブック 268の技』のP160には,以下のような例が示されており, これだと配列をシャッフルできています。 =============================================================== class Array def shuffle arr = dup collect{ arr.slice!(rand(arr.length)) } end end =============================================================== そこで,質問なのですが, 何故,『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