Показать сообщение отдельно
Старый 05.04.2011, 18:20
kseniya вне форума Посмотреть профиль Отправить личное сообщение для kseniya Найти все сообщения от kseniya
  № 22  
Ответить с цитированием
kseniya
 
Аватар для kseniya

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
Мой способ рекурсией быстрее урая я выйграла
Код AS3:
var t:int = getTimer();
for (var i:uint = 0; i< 100000; i++) {
	TestEtc();
}
trace(getTimer()-t);//1378
var t2:int = getTimer();
for (var i2:uint = 0; i2< 100000; i2++) {
	TestKseniya();
}
trace(getTimer()-t2);//1176
function TestEtc() {
	var arr:Array = new Array();
	arr.push({name:"one", manager:true});
	arr.push({name:"tru", manager:true});
	arr.push({name:"fri", manager:false});
	arr.push({name:"one", manager:true});
	arr.push({name:"tru", manager:true});
	arr.push({name:"fri", manager:true});
	var dict:Object = new Object();
	for (var i:uint = 0; i<arr.length; i++) {
		var hash:String = getHash(arr[i]);
		if (hash in dict) {
			arr.splice(i--, 1);
		}
		dict[hash] = true;
	}
 
	dict = null;
}
function TestKseniya() {
	var arr:Array = new Array();
	arr.push({name:"one", manager:true});
	arr.push({name:"tru", manager:true});
	arr.push({name:"fri", manager:false});
	arr.push({name:"one", manager:true});
	arr.push({name:"tru", manager:true});
	arr.push({name:"fri", manager:true});
	arr = sortO(arr,0,0,arr.length);
}
function getHash(obj:Object):String {
	return obj.name + (obj.manager ? '1' : '0');
}
function traceEmployee(element:*, index:int, arr:Array):void {
	trace("\t" + element.name + ((element.manager) ? " (manager)" : ""));
}
function sortO(arrr:Array, i1:uint, i2:uint, len:uint):Array {
	if (i1 < len) {
		if (i2 < len) {
			var len2:uint = len;
			if (i1 != i2 && arrr[i1]["name"] == arrr[i2]["name"] && arrr[i1]["manager"] == arrr[i2]["manager"]) {
				len2--;
				arrr.splice(i2, 1);
			}
			sortO(arrr, i1, i2+1, len2);
		} else {
			sortO(arrr, i1+1, 0, len);
		}
	}
	return arrr;
}