Hatena::Groupsubtech

#生存戦略 、それは

-> 06 { 07 / 22 }

なんで ruby には

14:41 | はてなブックマーク -  なんで ruby には - #生存戦略 、それは

Enumerable#shuffle みたいなメソッドが無いのだろう。疑似ランダムseed 生成まわりが、とかそういう?ランダム周りはむつかしくてわかんないお><

reinyannyanreinyannyan2006/07/22 16:19全然関係ないと思いますが、JavaScriptでこんなことをやってます!
(Array.prototype拡張)
random_each: function(yield) {
var arr = this.concat();
while (!arr.empty())
yield(arr.remove(arr.random()));
}

walf443walf4432006/07/22 16:34Hashはランダムアクセスが前提だからじゃないでしょうか。
つまり、Enumerableはコレクションに関してのアクセスに対するメソッド群なのですが、すべてのコレクションがインデックスを持つとは限らないわけで。
Arrayなら順番に並んでいるのでshuffleが導入されるのは提案すればあるかもしれません。

secondlifesecondlife2006/07/22 20:03>reinyannyan さん
ary.shuffle().each() の方が直感的で良くないでしょうか!?
>walf443さん
でも sort_by や sort は Enumerable なんですよね。hash でもとある条件でソートしてイテレータで回したいときに shuffle のようなメソッドは必要なのでは?

walf443walf4432006/07/22 23:58うーん。Enumerable#sortは頭の外にありました。すいません。確かにEnumerableのメソッドは結果としてArrayを返すのが多いことを考えるとEnumerable#shuffleがあってもおかしくないかもしれません。ただ、どうせ配列に変換するのだったらEnumerable#to_aを使ってArrayに変換してからArray#shuffleした方が少しだけ効率が良い実装が出来そうな気もします。(each以外のメソッドも使えるし)
MLを検索してみたらやっぱりこの話題はありました。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/8446
MLを読む感じだとどうやら押し方次第では入れてもらえそうです。

secondlifesecondlife2006/07/23 14:19ML まで漁ってくださってありがとうございます、なるほどー。
というかそのメールくまくまーの人のメールだ!!!

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20060722