Takachiho.rb #23

先日の、Takachiho.rbで考えた問題です。


以下のような配列があります。

var arr = [1,2,3,4,5,6,7,8,9,10];

この中から1つの要素をランダムに取り出すコードは以下のようにかけます。

var v = arr[Math.floor(Math.random()*10)];

では、ここから3つの要素をランダムに重複なしで取り出すにはどうしたら良いでしょう?

もともとRubyの勉強会をやりたくて立ち上げたんですが、今は言語・フレームワーク一切問わずという感じの緩やかな勉強会になっております(^^;

解答例は以下。

var indexes = [];
var vs = [];
while( indexes.length < 3 ){
var tmp = Math.floor(Math.random()*10);
if(indexes.indexOf(tmp) == -1){
indexes.push(tmp);
vs.push(arr[tmp]);
}
}

Rubyだと、1行で書けちゃいます。

arr.sample(3)