Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.12.2008, 14:51
elniko вне форума Посмотреть профиль Отправить личное сообщение для elniko Найти все сообщения от elniko
  № 1  
Ответить с цитированием
elniko
 
Аватар для elniko

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
Attention Удаление пустых элементов массива

Есть огромный массив (в нем иногда проскакивают пустые элементы)

[1,2,3,,,,,4,5,6,,7,,8, .... ,199999999,200000000]

как быстренько эти пустые элементы по-удалять и получить

[1,2,3,4,5,6,7,8, .... ,199999999,200000000]

простой перебор со сравнением каждого элемента не устраивает, т.к. массив огромен и займет эта процедура много времени, может есть какие-нить быстрые методы для этой цели?

Заранее всем спасибо и с наступающим Новым годом всех
__________________
graff.org.ru - рисуем граффити вКонтакте :)

Старый 30.12.2008, 15:16
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 2  
Ответить с цитированием
murz

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
Отсортировать
Код AS3:
[1,2,3,....10000,,,,,,]
Перебрать начиная с конца и удалить пустые

Старый 30.12.2008, 15:20
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Array.filter();
Код AS3:
var arr:Array = [1, 2, null, null, 3, 4, null, 5];
function removeEmpty(a:Object, index:int, source:Array):Boolean
{
	if (a is Number) return true;
	return false;
}
 
trace(arr.filter(removeEmpty));
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.12.2008 в 15:25.
Старый 30.12.2008, 15:36
elniko вне форума Посмотреть профиль Отправить личное сообщение для elniko Найти все сообщения от elniko
  № 4  
Ответить с цитированием
elniko
 
Аватар для elniko

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Array.filter();
Код AS3:
var arr:Array = [1, 2, null, null, 3, 4, null, 5];
function removeEmpty(a:Object, index:int, source:Array):Boolean
{
	if (a is Number) return true;
	return false;
}
 
trace(arr.filter(removeEmpty));
Вай-вай! Спасибо, дружище, помогло !
__________________
graff.org.ru - рисуем граффити вКонтакте :)

Старый 30.12.2008, 16:14
terbooter вне форума Посмотреть профиль Отправить личное сообщение для terbooter Найти все сообщения от terbooter
  № 5  
Ответить с цитированием
terbooter

Регистрация: Oct 2006
Адрес: Novosibirsk-Kaliningrad
Сообщений: 1,278
Отправить сообщение для terbooter с помощью ICQ Отправить сообщение для terbooter с помощью Skype™
А разве filter не есть тот самый простой перебор который не устраивал?

Старый 30.12.2008, 16:37
murz вне форума Посмотреть профиль Отправить личное сообщение для murz Найти все сообщения от murz
  № 6  
Ответить с цитированием
murz

Регистрация: Feb 2006
Сообщений: 148
Отправить сообщение для murz с помощью ICQ
filter круче как оказывается, работает быстрее

Старый 30.12.2008, 16:55
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 7  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
murz, я проверил. у меня медленее.
Код AS3:
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();

Старый 30.12.2008, 17:03
elniko вне форума Посмотреть профиль Отправить личное сообщение для elniko Найти все сообщения от elniko
  № 8  
Ответить с цитированием
elniko
 
Аватар для elniko

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
у меня Filter работает в десятки раз быстрее
__________________
graff.org.ru - рисуем граффити вКонтакте :)

Старый 30.12.2008, 17:14
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
У меня обычный перебор тоже работает быстрее.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.12.2008, 17:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
BlooDHounD, iNils:
Не можете написать во сколько раз разница?
Я не в смысле не верю, а просто интересно
Ну и, по вполне понятной причине, обидно, т.как по логике filter() как раз таки должен работать быстрее... ну хотя бы потому, что должен выполнять ту же процедуру, что и обычный перебор, только используя С скомпилированый код а не АС...

а, все, проверил, ну, примерно в 2 раза... хм, вообще не понятно тогда зачем фильтр нужен =/
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.12.2008 в 17:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:10.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.