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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.03.2008, 16:08
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 1  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
По умолчанию возможна ли сортировка XML объекта?

ну собств. вопрос, есть XML объект. например:
Код:
<elem>
   <subelem id="5" atr=.... />
   <subelem id="2" atr=....  />
   <subelem id="6" atr=....  />
   <subelem id="8" atr=.... />
   <subelem id="1" atr=.... />
   <subelem id="4" atr=.... />
   <subelem id="7" atr=.... />
   <subelem id="3" atr=.... />
</elem>
atr=... - какие-то еще атрибуты.
Так вот надо отсортировать данный объект XML-ный по id,
возможно ли на AS3 выполнить это стандартными средствами, или придется писать свой класс?
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

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

Регистрация: Sep 2002
Сообщений: 30,784
Нечто очень корявенькое:

Код:
function sort(...args):void {
	var item:XML = args[0] as XML;
	delete xml..*.(@id == item.@id)[0];
	xml.appendChild(item);
}

var xml:XML = <elem>
   <subelem id="5"/>
   <subelem id="2"/>
   <subelem id="6"/>
   <subelem id="8"/>
   <subelem id="1"/>
   <subelem id="4"/>
   <subelem id="7"/>
   <subelem id="3"/>
</elem>;
var list:XMLList = xml.subelem;
var arr:Array = new Array();
for each (var item:XML in list) {
	arr.push(item);
}
arr.sortOn('@id', Array.NUMERIC);
arr.map(sort);
trace(xml.toXMLString());

Старый 19.03.2008, 20:05
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 3  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
вообщем так в хелпах ничего и не нарыл ценного, написал простенькую функцию, если кому надо будет, то вот:
Код:
function xmlSort(sourceXML:XML, id:String):XML {
	var resultXML:XML = sourceXML;
	var i=resultXML.children().length();
	while(i--){
		var j=resultXML.children().length();
		while(j--){
			if(parseInt(resultXML.children()[j-1].@[id].toXMLString())>parseInt(resultXML.children()[j].@[id].toXMLString())){
				var temp_child = resultXML.children()[j-1].toXMLString();
				resultXML.replace(j-1, resultXML.children()[j].toXMLString());
				resultXML.replace(j, temp_child);
			}
		}
	}
	return resultXML;
}
var testXML:XML=<elem>
		   <subelem id="5" atr="wert" />
		   <subelem id="2" atr="xcvb"  />
		   <subelem id="6" atr="wert"  />
		   <subelem id="8" atr="kghjk" />
		   <subelem id="1" atr="wefghj" />
		   <subelem id="4" atr="oib" />
		   <subelem id="7" atr="wertycv" />
		   <subelem id="3" atr="wertn" />
		</elem>
		
trace(xmlSort(testXML, "id"));
метод сортировки не самый продвинутый, но если не жалко ресурсов, можете пользоваться...

__etc, извини, когда свое писал, твоего сообщения небыло еще... у меня еще корявее...
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...


Последний раз редактировалось etc; 19.03.2008 в 20:08.
Старый 20.03.2008, 06:13
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
var xml:XML = <elem>
   <subelem id="5"/>
   <subelem id="2"/>
   <subelem id="6"/>
   <subelem id="8"/>
   <subelem id="1"/>
   <subelem id="4"/>
   <subelem id="7"/>
   <subelem id="3"/>
</elem>;

var nx:XML;
for (var i:int = 0; i < xml.subelem.length(); i++){
	try { 
		if(int(xml.subelem[i].@id) > int(xml.subelem[i+1].@id)){
			nx = xml.subelem[i].copy();
			delete xml.subelem[i];
			xml.insertChildAfter(xml.subelem[i], nx);
			i-=2;
		} 
	} catch(e:Error){
		break;
	}
}
trace(xml.toXMLString());
Может я чего-то недоглядел... поздно уже и спать хочется %)
__________________
Hell is the possibility of sanity

Старый 20.03.2008, 08:43
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 5  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Два последних - пузырёк.
А у __etc - квиксорт (хоара), что в большинстве случаев лучше.

Хотя подозреваю, что когда начинают расставляться по местам, выигрыш сильно теряется...

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от WindWalker
Хотя подозреваю, что когда начинают расставляться по местам, выигрыш сильно теряется...
Вполне возможно, но что можно хотеть от кода, написанного за пять минут?
Можно провести оптимизацию, но мне лень. И ещё будет плохо себя вести при одинаковых id.

з.Ы. Все три варианта кода кривые

UPD: Небольшая оптимизация всего и вся:

Код:
function sort(item:XML, index:int, arr:Array):void {
	xml.appendChild(item);
}
var xml:XML = <elem>
   <subelem id="5"/>
   <subelem id="2"/>
   <subelem id="6"/>
   <subelem id="7" attr="1"/>
   <subelem id="8"/>
   <subelem id="1"/>
   <subelem id="4"/>
   <subelem id="7" attr="2"/>
   <subelem id="3"/>
</elem>;
var list:XMLList = xml.subelem;
delete xml.subelem;
var arr:Array = new Array();
for each (var item:XML in list) {
	arr.push(item);
}
arr.sortOn('@id', Array.NUMERIC);
arr.map(sort);
trace(xml.toXMLString());
И никаких проблем с одинаковыми id


Последний раз редактировалось etc; 20.03.2008 в 10:24.
Старый 20.03.2008, 12:36
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 7  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
_etc, ты же вроде в FDT работаешь, а такой код выдал
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от divinus
_etc, ты же вроде в FDT работаешь, а такой код выдал
Я написал это в CS3, мне лень создавать новый проект ради такой фигни.

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

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

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


 


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


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