![]() |
|
||||||||||
|
|
|
|||||
|
Есть огромный массив (в нем иногда проскакивают пустые элементы)
[1,2,3,,,,,4,5,6,,7,,8, .... ,199999999,200000000] как быстренько эти пустые элементы по-удалять и получить [1,2,3,4,5,6,7,8, .... ,199999999,200000000] простой перебор со сравнением каждого элемента не устраивает, т.к. массив огромен и займет эта процедура много времени, может есть какие-нить быстрые методы для этой цели? Заранее всем спасибо и с наступающим Новым годом всех ![]()
__________________
graff.org.ru - рисуем граффити вКонтакте :) |
|
|||||
|
|
|
|||||
|
Modus ponens
|
Array.filter();
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.12.2008 в 15:25. |
|
|||||
|
Вай-вай! Спасибо, дружище, помогло !
__________________
graff.org.ru - рисуем граффити вКонтакте :) |
|
|||||
|
А разве filter не есть тот самый простой перебор который не устраивал?
__________________
Сам себе репортер |
|
|||||
|
filter круче как оказывается, работает быстрее
|
|
|||||
|
стервочка (я мужик)
|
murz, я проверил. у меня медленее.
function test():void { const L:uint = 1E6; var i:uint, t:Number; var result:Array; // создаём случайный массив var arr:Array = new Array(); for ( i = 0; i<L; i++ ) { arr.push( Math.random() > 0 ? i : null ); } // через фильтер t = getTimer(); result = arr.filter( removeEmpty ); trace( getTimer() - t ); // обычный перебор t = getTimer(); result = new Array(); for ( i = 0; i<L; i++ ) { if ( arr[i] is Number ) { result.push( arr[i] ); } } trace( getTimer() - t ); } function removeEmpty(a:Object, index:int, source:Array):Boolean { if ( a is Number ) return true; return false; } test(); |
|
|||||
|
у меня Filter работает в десятки раз быстрее
__________________
graff.org.ru - рисуем граффити вКонтакте :) |
|
|||||
|
Modus ponens
|
BlooDHounD, iNils:
Не можете написать во сколько раз разница? Я не в смысле не верю, а просто интересно Ну и, по вполне понятной причине, обидно, т.как по логике filter() как раз таки должен работать быстрее... ну хотя бы потому, что должен выполнять ту же процедуру, что и обычный перебор, только используя С скомпилированый код а не АС... а, все, проверил, ну, примерно в 2 раза... хм, вообще не понятно тогда зачем фильтр нужен =/
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.12.2008 в 17:53. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|