Показать сообщение отдельно
Старый 11.01.2010, 14:35
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код 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

Только в моем способе из-за рекурсии могут быть проблемы. Если я в чем-то ошибаюсь — поправьте
__________________
hauts.ru


Последний раз редактировалось Hauts; 11.01.2010 в 14:43.