Показать сообщение отдельно
Старый 14.10.2009, 00:42
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Нашел пару тестов производительности actionScript'а, если кому интересно (мне было интересно):
performanceTester
Собственно, исходя из результатов тестов, думаю быстрее всего будет так:
Код AS3:
var arr:Array = new Array();
// исходные данные
// лучше Vector.<TYPE>, щас поймете почему
 
var result:Vector.<TYPE> = new Vector.<TYPE>(100, true); 
// 100 элементов, неизменяемая длина
// и тип данных TYPE
 
var reference:TYPE;
// вот тут нам пригодятся исходные данные
// в виде TYPE, т.к. reference - это временная
// ссылка на элемент массива (небольшой прирост, но даст)
 
var lastNonEmpty:int = -1; 
// последний ненулевой элемент в result
 
var len:uint = Array.length;
var i:uint = 0;
 
while (i < len) {
 
	reference = arr[i];
 
	if (reference  > 0) { // либо другое Ваше условие для reference			
		lastNonEmpty += 1;
		result[lastNonEmpty] = reference;			
	}
 
	i += 1; // шагаем к следующему элементу
}
Я не утверждаю что это единственно-верный способ, но должно быть быстрее splice'ов полюбому

PS
1) Количество элементов в result можно поставить равным максимально возможной длине arr (на случай, если все элементы пройдут фильтр успешно)
2) result можно (и нужно) создать заранее и использовать несколько раз
3) если Вам фильтровать 5 значений... =) забудьте о написанном выше
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 14.10.2009 в 02:54. Причина: вылизал код=)