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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 12.12.2003, 00:05
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 31  
: hr :

Регистрация: Nov 2003
Сообщений: 290
OK!!!

Спасибо!!!

Старый 12.12.2003, 00:16
iLoveYou вне форума Посмотреть профиль Отправить личное сообщение для iLoveYou Найти все сообщения от iLoveYou
  № 32  
iLoveYou
wanted

Регистрация: Sep 2002
Сообщений: 1,737
По умолчанию не уверен. пробуй.

Код:
arr = [];
arr.push({x:1, y:8});
arr.push({x:1, y:6});
arr.push({x:9, y:8});
arr.push({x:2, y:9});
arr.push({x:5, y:2});
arr.push({x:5, y:6});
arr.push({x:8, y:6});
arr.push({x:4, y:1});
arr.push({x:6, y:2});
arr_len = arr.length;
function sortarr(par1, par2) {
for (var i = 0; i<arr_len; i++) {
	for (var k = i+1; k<arr_len; k++) {
		if (arr[i][par1]>arr[k][par1]) {
			sx = arr[i].x;
			sy = arr[i].y;
			arr[i].x = arr[k].x;
			arr[i].y = arr[k].y;
			arr[k].x = sx;
			arr[k].y = sy;
		} else if (arr[i][par1] == arr[k][par1]) {
			if (arr[i][par2]>arr[k][par2]) {
				sxy = arr[i][par2];
				arr[i][par2] = arr[k][par2];
				arr[k][par2] = sxy;
			}
		}
	}
}
}
function printarr() {
	for (var i = 0; i<9; i++) {
		trace("x : "+arr[i].x+" | "+"y : "+arr[i].y);
	}
}
printarr();
trace("=======");
sortarr("x", "y");
printarr();
trace("=======");
sortarr("y", "x");
printarr();


Последний раз редактировалось iLoveYou; 12.12.2003 в 00:18.
Старый 12.12.2003, 00:46
Usnul вне форума Посмотреть профиль Отправить личное сообщение для Usnul Посетить домашнюю страницу Usnul Найти все сообщения от Usnul
  № 33  
Usnul
 
Аватар для Usnul

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
trace("Origin");
trace("===========================");
arr = [];
arr2=[];
arr[0] = {x:1, y:10};
arr[1] = {x:2, y:30};
arr[2] = {x:5, y:10};
arr[3] = {x:3, y:10};
arr[4] = {x:2, y:20};
arr[5] = {x:3, y:20};
arr[6] = {x:7, y:20};
arr[7] = {x:4, y:20};
for (var i = 0; i<arr.length; i++) {
trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}
trace("sortOn");
trace("===========================");
arr.sortOn("y");
for (var i = 0; i<arr.length; i++) {
trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}
for(var i=0;i<arr.length;i++){
if(typeof(arr2[arr[i].y])!="object"){arr2[arr[i].y]=[]}
arr2[arr[i].y][arr[i].x]=arr[i].x
}
for(var i=0;i<arr2.length;i++){
if(typeof(arr2[i])=="object"){
for(var j=0;j<arr2[i].length;j++){
if(typeof(arr2[i][j])=="number"){
if(a==undefined){a=0}
arr[a]={x:j,y:i}
a++
}
}
}
}
trace('after');
trace("===========================");
for (var i = 0; i<arr.length; i++) {
trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}

//Всем горе программерам посвящается
//Только парня запутали
__________________
I'm only happy when it rains.
Waka Laka

Старый 12.12.2003, 00:47
Usnul вне форума Посмотреть профиль Отправить личное сообщение для Usnul Посетить домашнюю страницу Usnul Найти все сообщения от Usnul
  № 34  
Usnul
 
Аватар для Usnul

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
Origin
===========================
x : 1 | y : 10
x : 2 | y : 30
x : 5 | y : 10
x : 3 | y : 10
x : 2 | y : 20
x : 3 | y : 20
x : 7 | y : 20
x : 4 | y : 20
sortOn
===========================
x : 3 | y : 10
x : 5 | y : 10
x : 1 | y : 10
x : 2 | y : 20
x : 3 | y : 20
x : 7 | y : 20
x : 4 | y : 20
x : 2 | y : 30
after
===========================
x : 1 | y : 10
x : 3 | y : 10
x : 5 | y : 10
x : 2 | y : 20
x : 3 | y : 20
x : 4 | y : 20
x : 7 | y : 20
x : 2 | y : 30
__________________
I'm only happy when it rains.
Waka Laka

Старый 12.12.2003, 00:54
Usnul вне форума Посмотреть профиль Отправить личное сообщение для Usnul Посетить домашнюю страницу Usnul Найти все сообщения от Usnul
  № 35  
Usnul
 
Аватар для Usnul

Регистрация: Mar 2001
Адрес: во сне
Сообщений: 2,701
Отправить сообщение для Usnul с помощью ICQ
Серег, я первый взялся писать, так что это вроде как наезд
смысл тот же, но я пол часа спустил при написании кода, гони мои пол часа обратно


ЗЫ
Не люблю! Не люблю! Не люблю! Не люблю! Не люблю! Не люблю! Не люблю! Не люблю! Не люблю! Не люблю!
__________________
I'm only happy when it rains.
Waka Laka

Старый 12.12.2003, 01:18
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 36  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
кхм... я канеш не настолько немеряно крут, чтобы написать три десятка строк за пол часа... и сортировку я не люблю... я люблю луну и спать...

но объясните мне, вот такого кода не достаточно для решения задачи ? :)
Код:
arr = [{x: ... , y: ...}, ..... ];
sortXY = function (a, b) {
	return (a.y == b.y)*(a.x>b.x || -1) || (a.y>b.y || -1);
};
arr.sortOn("y");
arr.sort(sortXY);
зы: голову ! берегите голову !


Последний раз редактировалось Nox Noctis; 12.12.2003 в 01:54.
Старый 12.12.2003, 01:56
Mage Lord вне форума Посмотреть профиль Отправить личное сообщение для Mage Lord Найти все сообщения от Mage Lord
  № 37  
Mage Lord
 
Аватар для Mage Lord

Регистрация: Aug 2001
Адрес: Александрия Невская
Сообщений: 70
Отправить сообщение для Mage Lord с помощью ICQ
Спакуха, Нокс. Нифига ты не понимаешь в колбасных обрезках. Нормальные герои всегда идут в обход.
__________________
Avete, alieni, nos morituri vos sperminus

Старый 12.12.2003, 12:02
Jlekc вне форума Посмотреть профиль Отправить личное сообщение для Jlekc Найти все сообщения от Jlekc
  № 38  
Jlekc
 
Аватар для Jlekc

Регистрация: Dec 2003
Адрес: Leopolis
Сообщений: 398
Отправить сообщение для Jlekc с помощью ICQ
Если делать то универсально . Сортировка с любым количеством аргументов:

Код:
Array.prototype.mySortOn = function() {
	this.constructor.arg = arguments;
	//	проблема с аргументами проверю потом
	//	-----	begin Compare
	function compare() {
		var argPrev = arguments[1].constructor.argPrev;
		arguments[1].constructor.argPrev = arguments[0];
		if (argPrev == undefined) {
			arguments[1].sortOn(arguments[0]);
		} else {
			var i = 0;
			var _arr = [arguments[1][0]];
			var _sort = [];
			while (i<arguments[1].length) {
				if (arguments[1][i][argPrev] == arguments[1][i+1][argPrev]) {
					_arr.push(arguments[1][i+1]);
				} else {
					_arr.sortOn(arguments[0]);
					_sort = _sort.concat(_arr);
					delete _arr;
					_arr = [arguments[1][i+1]];
				}
				++i;
			}
			return _sort;
		}
		return arguments[1];
	}
	//	-----	end of Compare
	while (this.constructor.arg.length>0) {
		this = compare(this.constructor.arg.shift(), this);
	}
	//	????????????????? this уже не принадлежит к arr
	arr = this;
};
//	-------	end Of Function
arr = [];
arr.push({x:1, y:1, z:1});
arr.push({x:2, y:2, z:2});
arr.push({x:2, y:2, z:1});
arr.push({x:2, y:1, z:1});
arr.push({x:3, y:1, z:1});
arr.push({x:2, y:1, z:2});
arr.mySortOn("y", "x", "z");
//
for (var i = 0; i<arr.length; i++) {
	trace("x : "+arr[i].x+" | "+"y : "+arr[i].y+" | "+"z : "+arr[i].z);
}
Только народ возник глюк . Объект и его псевдоним раздилились, пришлось писать какойто бред см. строку 34. Может кто чо понимает??

Старый 12.12.2003, 12:12
iLoveYou вне форума Посмотреть профиль Отправить личное сообщение для iLoveYou Найти все сообщения от iLoveYou
  № 39  
iLoveYou
wanted

Регистрация: Sep 2002
Сообщений: 1,737
Цитата:
Оригинал написал(а) Nox Noctis
но объясните мне, вот такого кода не достаточно для решения задачи ?
голову ! берегите голову !
Нокс, я тебя уважаю
Но когда я смотрю на предложенное тобой решение, вспоминаю времена, когда вы с BlooDeliMiter'ом и другими умными людьми соревновались на предмет "кто напишет один и тот же по смыслу код короче". Мне кажется, что здесь это не нужно, так как человеку требуется не решение как таковое, а освоение принципа. тогда он не скажет через неделю:"Нокс, а переделай свой код для меня так, чтобы он еще..........., короче, кофе в постель приносил" Ведь, согласись, твое решение не всем понятно и очевидно, хотя красиво и кратко. А показанный мной алгоритм до такой степени прост и прозрачен, что, может быть, лучше не жертвовать строками кода ради краткости. Мне кажется, понимание важнее.
__________________
вот тебе, революционный единоличник! вот тебе кулачество! вот тебе Союзкиножурнал!

Старый 12.12.2003, 19:01
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 40  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
Цитата:
Оригинал написал(а) Sergey"iLoveYou"
Нокс, я тебя уважаю :)
так мы с вами уважаемые люди ! :)))

в ифах слишком много строк :) но в любом случае - я сильно удивился тому как вы хитрецки стали решать эту сортировку...
_________________________________

есть два свойства - Y и X, нужно отсортировать по обоим, причем приоритет у Y...

первая сортировка делается через Array.sortOn - это сделали все. а вторая - делается через Array.sort с нестандартной функцией сортировки.. это не очевидно ? вопрос только в том как правильно эту функцию сформулировать...

2: hr :
функция сортировки получает два элемента массива A и B и выдает
1 : если A нужно поставить перед B
-1 : если А нужно поставить после В
0 : если менять местами А и В не нужно

учитывая что у нас в массиве объекты, и что сортировку по Y нарушать нельзя, получается следующее:

Код:
сортировка(А, В) {
        1. если  А.Y не равно B.Y => по X сортировать нельзя, 
            надо руководствоваться значениями Y. 
            возвращаем 1 если А.Y>B.Y, -1 если А.Y<B.Y и 0 если они равны.

        2. если  А.Y равно B.Y => по X сортировать можно. 
            возвращаем 1 если А.X>B.X, -1 если А.X<B.X
}


Последний раз редактировалось Nox Noctis; 12.12.2003 в 19:03.
Создать новую тему   Часовой пояс GMT +4, время: 23:53.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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