Показать сообщение отдельно
Старый 24.10.2010, 20:58
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Вобщем да, причина понятна, тут либо массив каждый раз создавать либо итератор. Массив создать проще, меня смущает только то что:
- создание массива может ввести в заблуждение - клиент класса может подумать, что он вправе его менять (и удивляться, почему ничего не изменяется);
- копирование массива обходится дороже создания итератора (сомневаюсь, что тест лажает из-за оптимизации кода компилятором):
Код AS3:
package  
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.utils.getTimer;
 
	public class ArrayCopyTest extends Sprite
	{
 
		public function ArrayCopyTest() 
		{
			var tf:TextField = new TextField();
			addChild(tf);
 
			var array:Array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
			var timer:int;
			var i:int;
 
			timer = getTimer();
			for (i = 100000; i-- > 0; )
			{
				var iterator:Iterator = new Iterator(array);
			}
			tf.appendText(String(getTimer() - timer) + "\n");// 33
 
			timer = getTimer();
			for (i = 100000; i-- > 0; )
			{
				var arrayCopy:Array = array.concat();
			}
			tf.appendText(String(getTimer() - timer) + "\n");// 128
		}
 
	}
 
}class Iterator
{
	private var _array:Array;
	private var _currentIndex:int = 0;
 
	public function Iterator(array:Array)
	{
		_array = array;
	}
 
	public function get hasNext():Boolean
	{
		return _currentIndex < _array.length - 1;
	}
 
	public function next():Object
	{
		return _array[_currentIndex++];
	}
}


Последний раз редактировалось expl; 24.10.2010 в 21:15.