Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.04.2011, 18:19
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 21  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Можно сто раз If'ами проверить, если без циклов.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 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;
}

Старый 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.
Старый 05.04.2011, 18:42
kseniya вне форума Посмотреть профиль Отправить личное сообщение для kseniya Найти все сообщения от kseniya
  № 24  
Ответить с цитированием
kseniya
 
Аватар для kseniya

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
эх, а жаль, я так старалась =(((

Старый 05.04.2011, 19:19
cleptoman вне форума Посмотреть профиль Отправить личное сообщение для cleptoman Найти все сообщения от cleptoman
  № 25  
Ответить с цитированием
cleptoman
 
Аватар для cleptoman

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
для сложносочиненных объектов можно так извратиться:
Код AS3:
Object.prototype.toString = function():String{
	var prop:String;
	var hash:String = "";
	for(prop in this){
		hash		+= prop + ":" + this[prop];
	}
	return hash;
}
 
var obj1:Object		= {name:"name1",var2:{varrr2:"someVal"}};
var obj2:Object		= {name:"name1",var2:"val2"};
trace(obj1);
trace(obj2);
__________________
http://cleptoman.free-lance.ru
achivements: дважды благословлен на воровство. осеяный благодатью

Старый 05.04.2011, 23:30
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 26  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от kseniya Посмотреть сообщение
блиин точно можно же хранить ещё и смотреть есть ли там что-то..
а можно ещё рекурсией)
Конечно красиво, но... во флеше есть ограничение на глубину рекурсии, и как раз тут легко можно на него попасть. Ну и не смотря на то, что метод все равно будет расточительным, я бы все-таки передавал ссылку на элемент массива, коротый сравниваем, а не индекс.
С другой стороны, можно развернуть рекусрию на уровне байткода Т.е. переписать вызовы функций и возвраты на джампы (и т.о. написать тот же алгоритм, только с использованием "goto") - тогда, я думаю, есть все шансы оказаться быстрее
__________________
Hell is the possibility of sanity

Старый 05.04.2011, 23:44
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 27  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А ничего, что мы дубликатами считаем совершенно разные объекты? Архитектуру топикстартера в топку.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
array , массив , удаление переменной
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.