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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Бугага
Цитата:
TestEtc: 1739
TestKseniya: 1647
TestIO: 1350
Код AS3:
var t:int = getTimer();
var i:int;
for (i=0; i< 100000; i++) {
	TestEtc();
}
trace("TestEtc: ", getTimer()-t);
 
t = getTimer();
for (i=0; i< 100000; i++) {
	TestKseniya();
}
trace("TestKseniya: ", getTimer()-t);
 
t = getTimer();
for (i=0; i< 100000; i++) {
	TestIO();
}
trace("TestIO: ", getTimer()-t);
 
 
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 TestIO() {
	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});
	removeDuplicatesIn(arr);
}
function removeDuplicatesIn( array:Array ):void
{
	if( !array || array.length < 1 )
		return;
 
	var i:int = array.length;
	while( i-- > 0 )
	{
		var m:Object = array[i];
		var j:int = i;
		while( j-- > 0 )
		{
			var n:Object = array[j];
			if( n.name == m.name && n.manager == m.manager )
			{
				array.splice( i, 1 );
				break;
			}
		}
	}
}
 
 
 
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;
}
Добавлено через 3 минуты
А вообще, у etc способ лучше. Он проявит себя с большими массивами.


Последний раз редактировалось i.o.; 05.04.2011 в 18:38.