[#44310] プログラムに対して意図したとおりの文字列を渡す方法 — "Information Kanasansoft" <kanasansoft@...>

kanasanです。

9 messages 2007/12/05

[#44332] クラス:相互参照系の作成方法について質問です — "Saburoh Sakai" <sabroh@...>

はじめまして、さかいと申します。

12 messages 2007/12/11

[#44366] Rake改善プロジェクト — "Hajime Hoshi" <hajimehoshi@...>

東京大学修士 1 年の星一と申します。

14 messages 2007/12/19

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

From: Maehara Masahide (前原正英) <maehrm@...>
Date: 2007-12-18 02:22:52 UTC
List: ruby-list #44357
前原です。

永井さん,ありがとうございす。

On Tue, 18 Dec 2007 10:36:45 +0900,
"Takehiro Nagai" <lukesilvia@gmail.com> wrote:

> これは、collectと、slice!、lengthのレシーバが全てselfのためかと思います。
> collectは、selfの長さ分処理を繰り返します。
> しかし、下記のコードですと、collect内でslice!を使っているので、collectを一回繰り返す
> 度にselfの要素数が減ってしまいます。

なるほどと思う反面,まだ理解できていないのですが,例えば,以下を実行す
ると,ランダムに要素が取り出されてうまくいくような気がしてしまいます。

最初,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]
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> 
====================================================================

上記で実行された,4,5,1,3,2 が collect されて,シャッフル完了かなと思っ
てしまいます……。
--
前原 正英(Maehara Masahide)<maehrm@miyazaki-c.ed.jp>
宮崎県立佐土原高等学校/情報技術科
http://www.miyazaki-c.ed.jp/sadowara-th/
GPG Fingerprint: 17A6 8B1C 1186 1B45 41AE 5BBB CE42 E9EA 69A2 5844

In This Thread