Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.07.2010, 19:01
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 1  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
По умолчанию цикл и массив

Код AS3:
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); // по окончанию проверки выводим массив, переделанный ;)
ошибка или что-то еще тут содержится в строчку for(var ii:int=0;ii<a2.length;ii++) {
как ее исправить ? Потому что при выполнения условия происходит уменьшение массива, следовательно и уменьшение длинны массива.

Старый 11.07.2010, 20:05
Elff вне форума Посмотреть профиль Отправить личное сообщение для Elff Найти все сообщения от Elff
  № 2  
Ответить с цитированием
Elff

Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
Код AS3:
var len:int = a2.length;
for(var i:int=0;i<len;i++){
...for(var ii:int=0;ii<len;ii++) {...
это имелось ввиду?
...а зачем такой странный код?


Последний раз редактировалось Elff; 11.07.2010 в 20:12.
Старый 11.07.2010, 21:21
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 3  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
суть заключается в следующем:

два цикла взяты для того, что бы сначала взять один элемент массива и сравнить его через цикл с другими элементами массива, не понятка получается в определении длинны массива во втором цикле, так как slice метод удаляет равный элемент взятый изначально, но этого не происходит, так как меняется длинна массива в цикле, и видать когда цикл идет снова по массиву, то длинна массива сохраняется первоначальная, а не измененная условием в цикле.

вопрос, как можно изменить это? возможно, что кто-то напишет код или предложит чтонить

Старый 12.07.2010, 01:41
Elff вне форума Посмотреть профиль Отправить личное сообщение для Elff Найти все сообщения от Elff
  № 4  
Ответить с цитированием
Elff

Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
нет, в вашем коде длина массива берется при каждой итерации
т.е. ход действий такой: в первой итерации первого цикла удаляются единицы, длина массива становится 2, срабатывает вторая итерация: первый 0 пропускается, т.к. i=2 и удаляется 2-ой 0. Все.
Если сделать как я написал, то все циклы сработают по 4 раза, но результат будет такой же.
Вы хотите убрать повторы? или единицы?

Старый 12.07.2010, 03:12
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 5  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
надо убрать повторы. вариант(листинг) который я выложил показывает в конце 0, а должен 1 и 0.

Старый 12.07.2010, 06:00
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Держи
Код AS3:
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.
Старый 12.07.2010, 10:53
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 7  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
Обычно для удаления из массива, по которому бегут используют цикл в обратном порядке. Т.е. бежишь по массиву с конца
Код AS3:
for(var i:int=a2.length-1 ; i >= 0;i--)
тогда проблемы с удалением никогда не будет, ибо length не будет пересчитываться. И ты не будешь перепрыгивать через удаленные элементы.

Старый 12.07.2010, 11:23
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 8  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
alexberkut, вы автору темы или мне?

Старый 12.07.2010, 11:28
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 9  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
Это я всем. Полезно знать.

Старый 12.07.2010, 13:32
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 10  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
Огромное спасибо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 20:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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