Цитата:
Сообщение от GBee
Я не понял, если честно? Поясните как? Пока вариант ИО элегантней :о))
|

Код AS3:
public class Selector {
public static function selectRandom(values:Array, weights:Array):uint {
var rnd:uint = uint(calculateTotalWeight(weights) * Math.random());
return values[findIndex(weights, rnd)];
}
private static function calculateTotalWeight(weights:Array /* uint */):uint {
var total:uint = 0;
for each (var weight:uint in weights) {
total += weight;
}
return total;
}
private static function findIndex(weights:Array, target:uint):uint {
var accumulated:uint = 0;
var upperIndex:uint = weights.length - 1;
for (var i:uint = 0; i < upperIndex; ++i) {
accumulated += weights[i];
if (accumulated > target) {
return i;
}
}
return upperIndex;
}
}
P.S. Граждане, будьте проще.