![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
значит maxLength не меняется
Похоже логика цикла такова: |
|
|||||
|
мы же не удаляем элементы массива, поэтому и не меняется maxLenght.
отсюда и следует, что цикл бесконечно будет повторяться. 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) }
__________________
Нельзя передать сложность, а только знание о ней. |
|
|||||
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. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 177
|
GBee, спасибо, что всё "разживали"!
В вышеуказанном примере сравнить быстродействие методов, предложенных Tasmanec и GBee методом Inet_PC мне не удалось, по причине противоречивых выходных данных (коды исполняються попеременно за 1 и 0 мс.). Вместе с тем, метод GBee представляется мне более наглядным. Также, последовательность вывода элементов массивов в двух методах отличается. Последний раз редактировалось zorexundra; 10.10.2011 в 14:58. |
|
|||||
|
Цитата:
__________________
http://www.chessmax.ru |
|
|||||
|
Регистрация: Jul 2011
Сообщений: 67
|
Хе хе свои фокусы покусы покажу что-ли.
Так за один проход функции можно отсекать сразу несколько дочерних массивов с максимальной длинной: 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; } 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. |
|
|
« Предыдущая тема | Следующая тема » |
|
|