|
|
|||||
[+4 06.05.14]
|
Сортировка подобных массивов
Привет всем. Такой вопрос, имеется обычный массив типа [1,2,8,7,3] и другой типа [g,f,n,t,k]
Мы сортируем первый массив как Array.NUMERIC - а второй должен отсортироваться аналогично ему, то есть 1,2,3,7,8 - g,f,k,t,n Можно ли это сделать как то быстро, или все таки придется перебором самому?
__________________
Марк Tween |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Поможет?
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
[+4 06.05.14]
|
Wolsh - нет не поможет, я читал про это. Суть приблизительно такая, приходжит жсон с сервера, и все время как попало то x1 : { data : { y8 : 20 ,... } , то x8 снчала - короче в разнабой. Я из этого всего делаю массивы, так надо. Один из массивов получается числовой и я могу его сортировать , а все другие - текстовые, вот и нужно отсориторовать индексы у них так же, как в числовом. Получается утилиту свою писать, верно понимаю?
__________________
Марк Tween |
|
|||||
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); } } } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
in4core, а может вовсе не надо месить все массивы? Может достаточно создать карту индексов и обращаться ко всем массивам через нее? Ну, то есть, создать отсортированный массив индексов и далее при обращении ко всем массивам использовать в качестве индекса значения из этого массива, а порядок в самих массивах не менять вообще.
__________________
Reality.getBounds(this); |
|
|||||
.
|
Цитата:
Как я понял, его не можете его перебрать последовательно, по индексам Попросите сервер сделать его как положено. В JSON, по моему, есть такая возможность (Массив (одномерный)). |
|
|||||
[+4 06.05.14]
|
Дима то есть, есть какие то методики, чтобы сделать индексированный жсон с пхп? Не поделишься?
Задача такая имея { a : {} , d : {} , x:{} , b: {} } получать всегда так { a:{} , b:{}, d:{} , x:{} }
__________________
Марк Tween |
|
|||||
.
|
Получили вы его в какой-то последовательности, но for..in чисто физически не сможет его перебрать именно в оригинальной последовательности. Он так работает. Все остальное - танцы с бубном. Проще всего сразу создавать индексированный массив.
|
Часовой пояс GMT +4, время: 13:06. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|