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

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

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

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
Цитата:
Сообщение от etc Посмотреть сообщение
Жду когда кто-нибудь напишет вариант с одним единственным циклом.
оно?
Код AS3:
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});
trace("Employees:");
arr.sortOn(["name", "manager"], [Array.CASEINSENSITIVE, Array.CASEINSENSITIVE]);
arr.forEach(traceEmployee);
for(var i:uint = 0; i<arr.length; i++){
	if(arr[i]["name"] == arr[i+1]["name"] && arr[i]["manager"] == arr[i+1]["manager"]){
		arr.splice( i, 1 );
	}
}
trace("Managers:");
arr.forEach(traceEmployee);
function traceEmployee(element:*, index:int, arr:Array):void {
	trace("\t" + element.name + ((element.manager) ? " (manager)" : ""));
}

Старый 05.04.2011, 17:48
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 12  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
kseniya, сортировка тоже цикл.

Старый 05.04.2011, 17:52
an_games вне форума Посмотреть профиль Отправить личное сообщение для an_games Найти все сообщения от an_games
  № 13  
Ответить с цитированием
an_games

Регистрация: Mar 2007
Сообщений: 207
Могу ошибаться, тк все что знаю об AS3-это первые пять глав мука, но вроде можно использовать Array.indexOf() , по идее как раз 1 цикл.

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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Именинничек, давай, не томи уже ))

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если уж использовали forEach() / sortOn(), так уж точно было бы лучше использовать filter() всяко быстрее было бы.
Только, мне кажется, что лучше построить добавление и удаление так, чтобы дубликаты не добавлялись - это будет гораздо менее затратно, да и по логике более очевидно.
EDIT: indexOf - такой же цикл.
Кроме того, он сравнивает ссылки на объекты а не значения их свойств. Т.е. из того, как я понял задание, new Point(100, 500) и { x : 100, y : 500 } в данном контексте считаются одинаковыми.
__________________
Hell is the possibility of sanity


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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
forEach() / filter() - всяко медленнее обычных циклов. Там каждый раз вызов сторонней функции происходит, что далеко не быстро..

Старый 05.04.2011, 17:58
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 17  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
an_games, indexOf вполне себе цикл и тоже не подойдёт.

В один цикл (трейсы не считаются):
Код AS3:
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});
trace("Employees:");
arr.forEach(traceEmployee);
function getHash(obj:Object):String {
	return obj.name + (obj.manager ? '1' : '0');
}
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;
 
trace("Managers:");
arr.forEach(traceEmployee);
function traceEmployee(element:*, index:int, arr:Array):void {
	trace("\t" + element.name + ((element.manager) ? " (manager)" : ""));
}

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

Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
блиин точно можно же хранить ещё и смотреть есть ли там что-то..
а можно ещё рекурсией)

Код AS3:
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});
trace("Employees:");
arr.forEach(traceEmployee);
arr = sortO(arr,0,0,arr.length);
trace("Managers:");
arr.forEach(traceEmployee);
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;
}


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

Регистрация: Mar 2007
Сообщений: 207
Доу, прямо-таки новые горизонты окрылись.

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

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
kseniya, жесть

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

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

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

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


 


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


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