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

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

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

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
По умолчанию Посоветуйте. Алгоритм сортировки массива объектов по полям объекта

Есть массив объектов.
У объекта есть поля целочисленные.
Код:
var arr:Array = new Array();

function addElement(p1:int, p2:int, p3:int) {
    var o:Object = new Object();
    o.sortIndex1 = p1;
    o.sortIndex2 = p2;
    o.sortIndex3 = p3;
    
    arr.push(o);
}
Нужно отсортировать вначале по sortIndex1, если sortIndex1 одинаковый то сортировать по sortIndex2, если sortIndex2 одинаковый, то сортировать по sortIndex3.

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

Регистрация: Sep 2002
Сообщений: 30,787
sort + function.

Код:
var arr:Array = new Array();
function sort(a:Object, b:Object):int {
	if (a.index0 == b.index0) {
		if (a.index1 == b.index1) {
			return a.index2 > b.index2 ? 1 : -1;
		} else {
			return a.index1 > b.index1 ? 1 : -1;
		}
	} else {
		return a.index0 > b.index0 ? 1 : -1;
	}
	return 0;	
}
for (var i:uint = 0;i < 15;i+=1) {
	var o:Object = new Object();
	o.index0 = Math.floor(Math.random()*4);
	o.index1 = Math.floor(Math.random()*4);
	o.index2 = Math.floor(Math.random()*4);
	o.toString = function():String {
		return '['+this.index0+','+this.index1+','+this.index2+']';
	}
	arr.push(o);
}
arr.sort(sort);
trace(arr.join('\n'));
Можно упростить, если нужно.


Последний раз редактировалось etc; 26.03.2008 в 15:02.
Старый 26.03.2008, 15:05
divinus вне форума Посмотреть профиль Отправить личное сообщение для divinus Найти все сообщения от divinus
  № 3  
Ответить с цитированием
divinus
 
Аватар для divinus

Регистрация: Dec 2005
Адрес: мухосранск
Сообщений: 661
Отправить сообщение для divinus с помощью ICQ
ну, на вскидку вот такой кривой вариант (возможно не сработает):
Код:
var arr:Array = new Array();

function addElement(p1:int, p2:int, p3:int) {
	var o:Object = new Object();
	o.sortIndex1 = p1;
	o.sortIndex2 = p2;
	o.sortIndex3 = p3;
	o.sortHex = p1.toString() + p2.toString() + p3.toString();
	arr.push(o);
}
for(var i:int=0; i<10; i++){
	addElement(Math.floor(Math.random()*100), Math.floor(Math.random()*100), Math.floor(Math.random()*100));
}
for(i=0; i<10; i++){
	trace(arr[i].sortIndex1+" "+arr[i].sortIndex2+" "+arr[i].sortIndex3);
}
trace("----------------------");
arr.sortOn("sortHex");
for(i=0; i<10; i++){
	trace(arr[i].sortIndex1+" "+arr[i].sortIndex2+" "+arr[i].sortIndex3);
}
__________________
Кто может делать - делает, кто не может делать - учит, кто не может учить - управляет...

Старый 26.03.2008, 15:25
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 4  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
спасибо

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

Регистрация: Sep 2002
Сообщений: 30,787
Забыли про sortOn (respect to BlooDHounD):

Код:
var arr:Array = new Array();
for (var i:uint = 0;i < 15;i+=1) {
	var o:Object = new Object();
	o.index0 = Math.floor(Math.random()*4);
	o.index1 = Math.floor(Math.random()*4);
	o.index2 = Math.floor(Math.random()*4);
	o.toString = function():String {
		return '['+this.index0+','+this.index1+','+this.index2+']';
	}
	arr.push(o);
}
arr.sortOn(["index0", "index1", "index2"]);
trace(arr.join('\n'));

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

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

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


 


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


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