|
|
|||||
Изменение данных в массиве
Собственно возможно ли быстро, без перебора каждого элемента, превратить вот это
вот в это ???
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Без перебора никак
|
|
|||||
function setUintType(value:String, index:int, array:Array):uint { return uint(value); } a = a.map(setUintType, null); но это так же перебор элементов. Просто Добавлено через 1 час 5 минут Провёл замеры. package { import flash.display.Sprite; import flash.utils.getTimer; import flash.utils.setTimeout; public class w2 extends Sprite { private var a:Array; private var t:int; private var funcRoute:Array; public function w2() { a = []; var count:uint = 1000000; while(--count) { a.push( String( uint(Math.random()*1000) ) ); } funcRoute = [ undefinedFunc, undefinedMultiFunc, externalFunction, internalfunction, forinFunction, foreachFunction]; nextstep(); } private function undefinedFunc():void { start(); var b:Array = a.map ( function(value:String, index:int, array:Array):uint{ return uint(value); }, null ); calc(); nextstep(); } private function undefinedMultiFunc():void { start(); var b:Array = a.map(function(...v):uint{return v[0]}, null); calc(); nextstep(); } private function externalFunction():void { start(); var b:Array = a.map(setUintType, null); calc(); nextstep(); } private function internalfunction():void { start(); function internalfunc(value:String, index:int, array:Array):uint { return uint(value); } var b:Array = a.map(internalfunc, null); calc(); nextstep(); } private function forinFunction():void { var b:Array = []; start(); for(var i:uint=0; i<a.length; i++) { b.push(uint(a[i])); } calc(); nextstep(); } private function foreachFunction():void { var b:Array = []; start(); for each(var v:String in a){ b.push( uint(v) ); } calc(); nextstep(); } private function calc():void { var timeoffset:uint = getTimer()-t; var err:Object; try { err.call(); } catch (e:*) { var msg:String = e.getStackTrace(); var arr:Array = msg.split('/'); var caller:Array = arr[2].split('('); var functname:String = caller[0]; } trace(functname+" -> "+ timeoffset); } private function start():void { t = getTimer(); } private function setUintType(value:String, index:int, array:Array):uint { return uint(value); } private function nextstep():void { if (funcRoute.length) { setTimeout( funcRoute.shift(), 3000); } } } } Цитата:
__________________
return this... Последний раз редактировалось AlexCooper; 14.09.2015 в 20:41. |
|
|||||
Спасибо!
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
вот такую типизацию еще можно использовать
|
|
|||||
Вот это вообще идеально!
__________________
Я заклинаю вас действовать иначе. |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
for можно слегка ускорить.
+ самый быстрый вариант у меня получился undefinedFunc -> 260 undefinedMultiFunc -> 550 externalFunction -> 235 internalfunction -> 234 forFunction -> 250 foreachFunction -> 141 forinFunction -> 110 newforFunction -> 140 array2vectorFunction -> 265 Цитата:
+ for each + push не гарантируют порядок элементов, если в массиве будут отсутствоват элементы. upd: если кто-то будет когда-то это читать, знайте что тестить в дебаге не верно и в релизе получились совсем иные результаты. самый быстрый - цикл с обратным перебором. Последний раз редактировалось udaaff; 07.10.2015 в 02:34. |
Часовой пояс GMT +4, время: 03:42. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|