![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Постоянно у меня куча разнообразных задач с массивами - одна краше другой и не каждую могу решить сам к сожалению((( Но как хорошо, что есть любимый форум, а на нём умные люди всегда готовые помочь и конечно повысить скил "репутация"! Подмазался, а теперь к делу:
Вот массив объектов, назовём его ArrayX: 5 3 0, 0 4 1, 6 5 2, 1 6 3, 6 5 2, 0 4 1, 6 5 15, 1 6 3, 7 7 4, 2 8 5, 7 7 4, 1 6 3, 7 7 4, 2 8 5, 8 9 6, 3 10 7 Каждый элемент этого массива содержит три числа, некоторые элементы полностью одинаковы, так вот: если попадается элемент, который уже встречался, то в новый массив передаётся индекс первого попавшегося и все элементы, идущие за уже попадавшимся, сдвигаются на единицу к началу массива. Должен получиться вот такой массив: Думаю, сначала нужно отобрать все первые попавшиеся уникальные элементы в отдельный массив, это может помочь.(эту часть кода я уже написал) Вот все уникальные элементы в нужном порядке. Например здесь индекс элемента "6 5 2" это 2, в массиве ArrayX он попадается несколько раз, каждый раз когда он попадается - в новый массив нужно записать "2", дальше идёт "1 6 3" у него индекс 3, каждый раз, когда он попадается в массиве ArrayX - в новый массив пишем "3" и т.д. Последний раз редактировалось Sintesis; 07.07.2011 в 02:37. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Нет конечно, например у "6 5 15" индекс 4, у "7 7 4" - 5, у "2 8 5" - 6 что видно по последнему приведённому мной массиву.
Ещё раз его повторю: Последний раз редактировалось Sintesis; 07.07.2011 в 02:53. |
|
|||||
|
а, ты про индексе в массиве)
Добавлено через 21 минуту ну сначала наверное так var pre_res:Array = new Array(); for(i=0;i < ArrayX.length;i++) { var ar:Array = ArrayX[i].split(" "); var cur_ind:int = parseInt(ar[2]); pre_res.push(cur_ind); } а потом уже по массиву этому пробежаться и сделать еще массив куда конечный результат будет пихаться var res:Array = new Array(); var tmp:Array; for(i=0;i < pre_res.length;i++) { if(i==0) { res.push({indexOf(pre_res[i]), pre_res[i]}); } else { var isRepeat:Boolean; for(j=0;j < res.length;j++) { if(pre_res[i]==res[j][1]) { res.push({res[j][0], res[j][1]}); isRepeat=true; } } if(!isRepeat) res.push({indexOf(pre_res[i]), pre_res[i]}); } } надеюсь в общих чертах донес, а то устал и голова раскалывается Последний раз редактировалось MXPain; 07.07.2011 в 03:56. |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 11
|
function f(s:Vector.<String>):Vector.<int> { var n:int; var uniqueString:Vector.<String> = new Vector.<String>(); var result:Vector.<int> = new Vector.<int>(); for (var i:int = 0; i < s.length; i++) { n = -1; for (var j:int = 0; j < uniqueString.length; j++) if (s[i] == uniqueString[j]) {n = j; break;} if (n == -1) { uniqueString.push(s[i]); result.push(uniqueString.length-1); } else result.push(n); } return result; } |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Во спасибо сейчас проверю, оба способа.
MXPain, а что это за конструкция: res.push({indexOf(pre_res[i]), pre_res[i]}); ? Так проверил способ AtomicFlasher'а он вернул вот такой массив [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] Зачем это? Не понятно. И вообще там цикл for в цикле for без тела вот этот: это нормально? MXPain, конструкция res.push({indexOf(pre_res[i]), pre_res[i]}); не работает, выдаёт ошибку. И зачем ты сначала вырезал последние цифры элементов массива ArrayX? Я же сказал, они ни как не влияют на результат. Последний раз редактировалось Sintesis; 07.07.2011 в 23:48. |
|
|||||
|
Цитата:
Добавлено через 1 минуту значение нужно для вспомогательных целей потом можно в массиве оставить только индексы |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Ещё ра з повторю что нужно. Есть массив ArrayX (сделаю его покороче для лучшей наглядности):
нужно получить: вспомогательный массив: Добавлено через 11 минут Цитата:
Цитата:
Вроде в общем всё правильно сделано, но загвоздка в этом res.push({indexOf(pre_res[i]), pre_res[i]}) тут ты пытаешься создать массив объектов? Добавлено через 53 минуты Ага понял, тоесть вот так Эх, и так не получается, потому, что так создаётся числовой массив... Последний раз редактировалось Sintesis; 07.07.2011 в 17:54. |
|
|||||
|
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
могу предложить еще вариант =)
var a:Array = ["5 3 0", "0 4 1", "6 5 2", "1 6 3", "6 5 2", "0 4 1", "6 5 15", "1 6 3", "7 7 4", "2 8 5", "7 7 4", "1 6 3", "7 7 4", "2 8 5", "8 9 6", "3 10 7"]; var b:Array = [].concat(a);//уникальные элементы var result:Array = []; var len:int = a.length; for(var i = 0; i < len; i++) { while(b.indexOf(b[i], i+1) != -1) { b.splice(b.indexOf(b[i], i+1), 1); } result.push(b.indexOf(a[i])); } trace(b); trace(result); |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
О отлично попробую, но вариант MXPain'а заинтересовал, хочу разобраться в нём.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 13:28. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|