![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
var a2:Array=new Array(); var a:*; a2=[1,0,0,1]; // массив (может быть любым) trace(a2); // трейс начального массива for(var i:int=0;i<a2.length;i++){ a=String(a2[i]); // присваиваем а значение и преобразуем. for(var ii:int=0;ii<a2.length;ii++) { // идем по-каждому символу if(a==String(a2[ii])) { // проверяем a2.splice(ii,1); удаляем значение если есть совпрадения } } } trace(a2); // по окончанию проверки выводим массив, переделанный ;) как ее исправить ? Потому что при выполнения условия происходит уменьшение массива, следовательно и уменьшение длинны массива. |
|
|||||
|
Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
|
это имелось ввиду?
...а зачем такой странный код? Последний раз редактировалось Elff; 11.07.2010 в 20:12. |
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
суть заключается в следующем:
два цикла взяты для того, что бы сначала взять один элемент массива и сравнить его через цикл с другими элементами массива, не понятка получается в определении длинны массива во втором цикле, так как slice метод удаляет равный элемент взятый изначально, но этого не происходит, так как меняется длинна массива в цикле, и видать когда цикл идет снова по массиву, то длинна массива сохраняется первоначальная, а не измененная условием в цикле. вопрос, как можно изменить это? возможно, что кто-то напишет код или предложит чтонить ![]() |
|
|||||
|
Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
|
нет, в вашем коде длина массива берется при каждой итерации
т.е. ход действий такой: в первой итерации первого цикла удаляются единицы, длина массива становится 2, срабатывает вторая итерация: первый 0 пропускается, т.к. i=2 и удаляется 2-ой 0. Все. Если сделать как я написал, то все циклы сработают по 4 раза, но результат будет такой же. Вы хотите убрать повторы? или единицы? |
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
надо убрать повторы. вариант(листинг) который я выложил показывает в конце 0, а должен 1 и 0.
|
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Держи
var arr:Array = [ '0', '5', '0', '1', '2', '5', '1', '3', '1', '4', '4', '4' ]; trace( 'before: ' + arr ); // before: 0,5,0,1,2,5,1,3,1,4,4,4 excludeRepeats( arr ); trace( 'after: ' + arr ); // after: 0,5,1,2,3,4 function excludeRepeats( in_arr:Array ):void { var l:int = in_arr.length;; var i:int = 0; var ii:int; var e:String; for( ; i<l; i++ ) { e = in_arr[i]; ii = l; while( --ii > i ) { if( in_arr[ii] == e ) { in_arr.splice(ii,1); l--; } } } } Последний раз редактировалось i.o.; 12.07.2010 в 06:09. |
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
Обычно для удаления из массива, по которому бегут используют цикл в обратном порядке. Т.е. бежишь по массиву с конца
тогда проблемы с удалением никогда не будет, ибо length не будет пересчитываться. И ты не будешь перепрыгивать через удаленные элементы. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
alexberkut, вы автору темы или мне?
|
|
|||||
|
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
Это я всем. Полезно знать.
|
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
Огромное спасибо.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|