Perlについての質問箱 9箱目
■ このスレッドは過去ログ倉庫に格納されています
0053デフォルトの名無しさん
NGNG@data = qw( a a a b b c );
$select = $data[ rand(@data) ];
とやっていましたが、個数が多いと配列が膨れ上がってしまいます。
(a が1000個とか)
%data = ( a => 3, b => 2 c =>1 );
というハッシュに対して同じように確率に応じた要素選択をするにはどうしたら良いでしょうか。
foreach (values(%data)){ $sum += $_; }
foreach (keys(%data)){ if( rand($sum) < $data{$_} ){ $select = $_; last} }
というのを思いつきましたが、Perlに熟練した皆さんならもっと美しいコードを書くような気がします。
■ このスレッドは過去ログ倉庫に格納されています