Показать сообщение отдельно
Старый 06.09.2014, 23:09
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 18  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getTimer;
	import flash.utils.setTimeout;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public static const COUNT:int = 1000000;
 
		public function Main() {
			super();
			_field = new TextField();
			_field.width = 800;
			_field.height = 600;
			addChild(_field);
			setTimeout(runTests, 1000);
		}
 
		private function runTests():void {
			testNubideus();//testNubideus:27352
			testMikroAcse();//testMikroAcse:33144
			testSlavaRa();//testSlavaRa:23775
			testNooob();//testNooob:26051
		}
 
		private var _field:TextField;
 
		private function testNubideus():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s. Не скучай, %s!";
				str.replace(/%s|%d/g, function(substr:String, i:uint, str:String):String {
					switch(substr) {
						case "%s": return arr.shift();
						case "%d": return arr.shift();
					}
				});
			}
			_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
		}
 
		private function testMikroAcse():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				var len:int = arr.length;
				for(var i:int = 0; i < len; i++) {
					str = str.split("{" + i + "}").join(arr[i]);
				}
			}
			_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
		}
 
		private function testSlavaRa():void {
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringTool.format(str, args);
			}
			_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
		}
 
		private function testNooob():void {
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringUtils.format(str, "Юзернейм", "4", "года", "завтрашний", "только лишь все");
			}
			_field.appendText("\ntestNooob:" + (getTimer() - stamp));
		}
	}
 
}
 
class StringTool {
	[Inline]
	public static function format(source:String, args:Vector.<String>):String {
		for(var i:int = args.length; --i >= 0; ) {
			var pattern:String = "{" + i + "}";
			label: if(source.indexOf(pattern) != -1) {
				source = source.replace(pattern, args[i]);
				goto label;
			}
		}
		return source;
	}
}
 
class StringUtils
{
	private static const regExp:RegExp = /{(\w)}/g;
	private static var repl:Array;
 
	public static function format(source:String, ...args):String
	{
		repl = args;
		return source.replace(regExp, replaceFunc);
	}
 
	private static function replaceFunc(substr:String, group:int, i:uint, str:String):String
	{
		return repl[group];
	}
}
testNubideus:27352
testMikroAcse:33144
testSlavaRa:23775
testNooob:26051

зы
зачем надо было править мое форматирование?
__________________
местонахождение