Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   двумерный массив (http://www.flasher.ru/forum/showthread.php?t=52512)

: hr : 09.12.2003 16:17

двумерный массив
 
Друзья, помогите, что-то прямо творческий кризис настал :-(
Нужно упорядочить двумерный массив координат чтобы получилось так:

элементы должны идти сначала по возрастанию x, потом у...

допустим:
y1=-30;x1=0;
y2=-30;x2=10;
y3=-30;x3=20;
y4=-30;x4=30;

y5=-20;x5=0;
y6=-20;x6=10;
y7=-20;x7=20;
y8=-20;x8=30;

y9=-10;x9=0;
y10=-10;x10=10;
y11=-10;x11=20;
y12=-10;x12=30;

for (i=1; i<mass.length; i++) {
координата x записана в массиве mass[i][0]
координата y mass[i][1]
}

Заранее спасибо!!! Пиво с меня! ;)

Usnul 09.12.2003 16:34

legche sostavljat' massiv kak popalo, a potom formatirovat', 'to prosche, i v plane vesaq, i v plane skorosti.

Techmaker 09.12.2003 16:53

for(mass=[],i=0,y=-30;y<=-10;y+=10){
for(x=0;x<=30;x+=10,i++){
mass[i]=[];
mass[i][0]=x;
mass[i][1]=y;
};
};
for(i2=0;i2<i;i2++){
trace(mass[i2]);
};

Techmaker 09.12.2003 17:00

mass_x=[12,56,48,21,36];
mass_y=[542,226,40,58,0];
mass_x.sort(function(){return(arguments[0]>arguments[1]);});
mass_y.sort(function(){return(arguments[0]>arguments[1]);});
mass=[];
for(i in mass_x){mass[i]=[mass_x[i],mass_y[i]];};
for(i=0;i<mass.length;i++){trace(mass[i]);};

сортировка :)

: hr : 09.12.2003 18:59

так у меня массив и составляется как попало! это я для примера написал, главное - мне нужно упорядочить его по правилу, написанному в таблице.

Techmaker, У Вас сортируется по возрастанию mass_x и mass_y, а потом выводятся, а это же связанные значения, т.е.
не должно быть в начале

[12,56,48,21,36];
[542,226,40,58,0];

а потом

12,0
21,40
36,58
48,226
56,542

нужно - берем самое маленькое значение y - для него выводим по мере возрастания x (в случае наличия нескольких x с одинаковым y) - это сформировались n певых значений выходного массива

дальше взяли следующее по величине значение y - для него вывели x по мере возрастания...

и т.д. - посмотрите внимательно, пожалуйста, в пример который я привел!

HELP!!!

Jlekc 09.12.2003 19:25

Тебе обязательно делать сортировку в AS 1, может AS2 подойдет ??

Jlekc 09.12.2003 19:59

Я тут глянул функция 'sortOn' введена с шестёрки, так что этот сурс подойдет

Код:

arr = [];
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};
for (var i = 0; i<arr.length; i++) {
        trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}
arr.sortOn(["x", "y"]);
trace('after');
for (var i = 0; i<arr.length; i++) {
        trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}

если подошол жду обещенной награды :D

: hr : 09.12.2003 22:16

Млин!!!!! Наверное я что-то объясняю не правильно... :-( Jlekc огромное спасибо, что пытаетесь помочь, награда будет, но
у Вас:

x : 1 | y : 10
x : 2 | y : 30
x : 5 | y : 10
x : 3 | y : 10
x : 2 | y : 20
x : 3 | y : 20
after
x : 1 | y : 10
x : 3 | y : 20
x : 2 | y : 20
x : 3 | y : 10
x : 5 | y : 10
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 : 2 | y : 30

Видите в чем разница? Сначала для наименьшего y(10) перебираются по-возрастанию все x(1,3,5),
потом для следующего по величине y(20) - все x по возрастанию(2,3), затем для следующего y(30) и т.д.

Я уже голову сломал - никак не получается :(

Jlekc 10.12.2003 11:52

посмотри в синтаксис 'sortOn', можно делать сортировку по любому элементу. Я написал sortOn([ "x" , "y" ]) как общий пример.
А тебе надо sortOn([ "y", "x" ]). Извини упустил :)

Techmaker 10.12.2003 16:06

вот сделал, основываясь на примере Jlekc'а
Код:

arr = [];
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};
for (var i = 0; i<arr.length; i++) {
        trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}
arr.sort(function(){return(arguments[0].y>arguments[1].y)});
trace('after');
for (var i = 0; i<arr.length; i++) {
        trace('x : '+arr[i].x+' | '+'y : '+arr[i].y);
}



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

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