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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.10.2011, 11:43
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 21  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
значит maxLength не меняется
Похоже логика цикла такова:
Код AS3:
пока (максимальная длина больше нуля) {
     выполнять код.
     со вторым заходом значение максимальной длины осталось прежним, и оно по-прежнему больше нуля.
     с третьим тоже... и т.д. до бесконечности
}

Старый 10.10.2011, 12:10
Tasmanec вне форума Посмотреть профиль Отправить личное сообщение для Tasmanec Найти все сообщения от Tasmanec
  № 22  
Ответить с цитированием
Tasmanec
 
Аватар для Tasmanec

Регистрация: Aug 2011
Сообщений: 35
Отправить сообщение для Tasmanec с помощью Skype™
мы же не удаляем элементы массива, поэтому и не меняется maxLenght.
отсюда и следует, что цикл бесконечно будет повторяться.
Код AS3:
 
while(maxLenght > 0) { 
   for(var i:int = 0; i < myMassiv.lenght; i++) {
      if (maxLenght < myMassiv[i].lenght) {
         maxLenght = myMassiv[i].lenght;
         idArray = i;
      }					
   }				
   trace(myMassiv[idArray].pop());//делаете, что надо с каким Вам нужно элементом массива с максимальной длинной это будет массив myMassiv[idArray]
myMassyv[idArray].splice(maxLenght-1, 1);		//удаляем злокачественный элемент, чтобы изменилась переменная maxLenght)		
}
__________________
Нельзя передать сложность, а только знание о ней.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Код AS3:
while(maxLength > 0) { 
   maxLength--; //Длина самого длинного массива уменьшилась на 1 в предыдущей итерации.	
   for(var i:int = 0; i < myMassiv.length; i++) {
      if (maxLength < myMassiv[i].length) {
         maxLength = myMassiv[i].length;
         idArray = i;
      }					
   }
   if(maxLength<=0)
    break;
   trace(myMassiv[idArray].pop());//делаете, что надо с каким Вам нужно элементом массива с максимальной длинной это будет массив myMassiv[idArray]
 
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.


Последний раз редактировалось GBee; 10.10.2011 в 14:08.
Старый 10.10.2011, 14:55
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 24  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
GBee, спасибо, что всё "разживали"!

В вышеуказанном примере сравнить быстродействие методов, предложенных Tasmanec и GBee методом Inet_PC мне не удалось, по причине противоречивых выходных данных (коды исполняються попеременно за 1 и 0 мс.).
Вместе с тем, метод GBee представляется мне более наглядным.
Также, последовательность вывода элементов массивов в двух методах отличается.


Последний раз редактировалось zorexundra; 10.10.2011 в 14:58.
Старый 10.10.2011, 15:48
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 25  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
В вышеуказанном примере сравнить быстродействие методов, предложенных Tasmanec и GBee методом Inet_PC мне не удалось, по причине противоречивых выходных данных (коды исполняються попеременно за 1 и 0 мс.).
Просто при измерении нужно прогонять функцию много раз, где нить 100000, тогда примерно будет ясно who is who)
__________________
http://www.chessmax.ru

Старый 10.10.2011, 16:21
ProxyGreen вне форума Посмотреть профиль Отправить личное сообщение для ProxyGreen Найти все сообщения от ProxyGreen
  № 26  
Ответить с цитированием
ProxyGreen
 
Аватар для ProxyGreen

Регистрация: Jul 2011
Сообщений: 67
Хе хе свои фокусы покусы покажу что-ли.
Так за один проход функции можно отсекать сразу несколько дочерних массивов с максимальной длинной:

Код AS3:
private function maxLengthArraySlice(arr:Array):Array {
	var retArr:Array = new Array()
	var sortObj:Object = new Object();
	var maxLen:uint = 0;
	var arrLen:uint = 0;
	var iterator:int = arr.length-1;
	while (iterator >= 0) {
		arrLen = (arr[iterator] as Array).length;
		if (!sortObj[arrLen]) sortObj[arrLen] = [],
		maxLen = Math.max(maxLen, arrLen);
		(sortObj[arrLen] as Array).push(arr[iterator]);
		iterator--;
	}
	for( var i:* in sortObj) {
		if (i != maxLen) retArr = retArr.concat(sortObj[i] as Array);
	}
	return retArr;
}
Так получать массив с массивами определённой длины:

Код AS3:
private function lengthArraySlice(arr:Array, length:uint):Array {
	var retArr:Array = [];
	var sortObj:Object = new Object();
	var arrLen:uint = 0;
	var iterator:int = arr.length-1;
	while (iterator >= 0) {
		arrLen = (arr[iterator] as Array).length;
		if (!sortObj[arrLen]) sortObj[arrLen] = [];
		(sortObj[arrLen] as Array).push(arr[iterator]);
		iterator--;
	}
	for( var i:* in sortObj) {
		if (i == length) retArr = retArr.concat(sortObj[i] as Array);//поменять == на != если нужно удалить 
		//массивы опр. длинны, а не вернуть
	}
	return retArr;
}

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

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

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


 


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


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