Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сортировка подобных массивов (http://www.flasher.ru/forum/showthread.php?t=210375)

in4core 07.03.2015 01:12

Сортировка подобных массивов
 
Привет всем. Такой вопрос, имеется обычный массив типа [1,2,8,7,3] и другой типа [g,f,n,t,k]
Мы сортируем первый массив как Array.NUMERIC - а второй должен отсортироваться аналогично ему, то есть

1,2,3,7,8 - g,f,k,t,n
Можно ли это сделать как то быстро, или все таки придется перебором самому?

Wolsh 07.03.2015 02:06

Поможет?
Цитата:

Если указывается значение 8 или Array.RETURNINDEXEDARRAY для аргумента sortOptions параметра ...args, Flash возвращает отсортированный числовой массив индексов, отражающий результаты сортировки, и не модифицирует массив.

in4core 07.03.2015 13:24

Wolsh - нет не поможет, я читал про это. Суть приблизительно такая, приходжит жсон с сервера, и все время как попало то x1 : { data : { y8 : 20 ,... } , то x8 снчала - короче в разнабой. Я из этого всего делаю массивы, так надо. Один из массивов получается числовой и я могу его сортировать , а все другие - текстовые, вот и нужно отсориторовать индексы у них так же, как в числовом. Получается утилиту свою писать, верно понимаю?

mayakwd 07.03.2015 14:04

Код AS3:

package {
        import flash.display.Sprite;
 
        /**
        * @author Ilya Malanin (flashdeveloper[at]pastila.org)
        */

        public class LinkedArraysSort extends Sprite {
                public function LinkedArraysSort() {
                        var keys : Array = [1, 2, 8, 7, 3];
                        var values : Array = ['g', 'f', 'n', 't', 'k'];
 
                        testLinkedSort1(keys.concat(), values.concat());
                        testLinkedSort2(keys.concat(), values.concat());
                }
 
                private function testLinkedSort1(keys : Array, values : Array) : void {
                        var sortedIndexes : Array = keys.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
                        remapValues(keys, sortedIndexes);
                        remapValues(values, sortedIndexes);
 
                        trace("Test 1\n---------------");
 
                        trace("keys: " + keys);
                        trace("values: " + values+'\n');
                }
 
                private function remapValues(values : Array, newIndexes : Array) : void {
                        var result : Array = [];
 
                        const length : int = newIndexes.length;
                        for (var i : int = 0; i < length; i++) {
                                result[i] = values[newIndexes[i]];
                        }
 
                        values.length = 0;
                        values.splice(0, 0, result);
                }
 
                private function testLinkedSort2(keys : Array, values : Array) : void {
                        trace("Test 2\n---------------");
 
                        var merged : Array = [];
 
                        const length : int = keys.length;
                        for (var i : int = 0; i < length; i++) {
                                merged.push({key: keys[i], value: values[i]});
                        }
 
                        merged.sortOn('key', Array.NUMERIC);
 
                        for (i = 0; i < length; i++) {
                                keys[i] = merged[i]['key'];
                                values[i] = merged[i]['value'];
                        }
 
                        trace('keys: ' + keys);
                        trace('values: ' + values);
                }
        }
}


Wolsh 07.03.2015 14:13

in4core, а может вовсе не надо месить все массивы? Может достаточно создать карту индексов и обращаться ко всем массивам через нее? Ну, то есть, создать отсортированный массив индексов и далее при обращении ко всем массивам использовать в качестве индекса значения из этого массива, а порядок в самих массивах не менять вообще.

in4core 07.03.2015 17:05

mayakwd - круто, спасибо ))))

dimarik 09.03.2015 16:44

Цитата:

Сообщение от in4core (Сообщение 1179710)
Wolsh - нет не поможет, я читал про это. Суть приблизительно такая, приходжит жсон с сервера, и все время как попало то x1 : { data : { y8 : 20 ,... } , то x8 снчала - короче в разнабой. Я из этого всего делаю массивы, так надо. Один из массивов получается числовой и я могу его сортировать , а все другие - текстовые, вот и нужно отсориторовать индексы у них так же, как в числовом. Получается утилиту свою писать, верно понимаю?

Просто JSON с сервера не индексированный массив, в этом суть.
Как я понял, его не можете его перебрать последовательно, по индексам
Попросите сервер сделать его как положено. В JSON, по моему, есть такая возможность (Массив (одномерный)).

in4core 10.03.2015 14:04

Дима то есть, есть какие то методики, чтобы сделать индексированный жсон с пхп? Не поделишься?
Задача такая имея { a : {} , d : {} , x:{} , b: {} } получать всегда так { a:{} , b:{}, d:{} , x:{} }

dimarik 10.03.2015 14:09

Получили вы его в какой-то последовательности, но for..in чисто физически не сможет его перебрать именно в оригинальной последовательности. Он так работает. Все остальное - танцы с бубном. Проще всего сразу создавать индексированный массив.


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

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