Показать сообщение отдельно
Старый 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;
}