
Код AS1/AS2:
var randoms = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
function getRandomNum() {
var rnd = Math.floor(Math.random()*randoms.length);
var toReturn = randoms[rnd];
randoms.splice(rnd,1);
return toReturn;
}
for (var k = 0; k<20; k++) {
trace(getRandomNum());
}
Это способ от udaaff.
Вот сравнение скорости:

Код AS1/AS2:
var randoms = [];
function getRandomNum() {
var rnd = Math.floor(Math.random()*1000);
if (randoms[rnd] != true) {
randoms[rnd] = true;
return rnd;
} else {
return getRandomNum();
}
}
var t1 = getTimer();
for (var k = 0; k<256; k++) {
trace(getRandomNum());
}
trace("getRandomNum1 "+(getTimer()-t1)+"ms");
var randoms2 = [];
for (var k = 0; k<=256; k++) {
randoms2[k] = Math.floor(Math.random()*1000);
}
function getRandomNum2() {
var rnd = Math.floor(Math.random()*randoms2.length);
var toReturn = randoms2[rnd];
randoms2.splice(rnd,1);
return toReturn;
}
var t2 = getTimer();
for (var k = 0; k<256; k++) {
trace(getRandomNum2());
}
trace("getRandomNum2 "+(getTimer()-t2)+"ms");
У меня получилось:
getRandomNum1 3ms
getRandomNum2 40ms
Только в моем способе из-за рекурсии могут быть проблемы. Если я в чем-то ошибаюсь — поправьте
