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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.05.2015, 23:00
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 21  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А у Array есть методы pop, shift etc.
Да, но они тоже изменяют массив. Там за кадром при увеличении длины массива, создается новый массив, длиннее предыдущего раза в полтора, и в него копируются все элементы исходного, а исходный уничтожается. После чего в новом уже есть пустые ячейки, куда и будут "вталкиваться" вот эти новые элементы. Это инфа из книжек, я не сам придумал. Правда читал это по джаве (в курсе OCPJP), но что-то мне подсказывает, что здесь механизм точно такой же. То есть как бы динамические массивы - это все миф, на самом деле все массивы имеют статическую длину, но можно создать иллюзию динамики за счет таких вот махинаций.
Вывод, в данном случае будет быстрее и проще сначала обработать строку регуляркой, а уже потом собрать из нее правильный массив. Хотя по поводу скорости регулярных выражений тоже утверждать не могу. Так же инфа из книжек (конкретно из Дж. Фриддла - Регулярные выражения). Но если кому интересно, можете провести тест скорости

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Вы и мертвого из могилы подымите
Код AS3:
function isEmpty(value:Object):Boolean { return !value; }
 
function deleteIf(array:Array, predicate:Function):Array {
    var i:int;
    for (var j:int; j < array.length; j++) {
        array[i] = array[j];
        if (!predicate(array[j])) i++;
    }
    array.length = i;
    return array;
}
 
function removeIf(array:Array, predicate:Function):Array {
    var result:Array = [];
    for each (var element:Object in array)
        if (!predicate(element)) result.push(element);
    return result;
}
 
removeIf([1, 0, 2, false, undefined, null, 3], isEmpty);
// [1, 2, 3]
deleteIf([1, 0, 2, false, undefined, null, 3], isEmpty);
// [1, 2, 3]
Есть такое явление "парадокс исследователя", это когда решение более общей проблемы делает решение ее часного случая более простым. Например, доказав, что рациональных не целых корней не бывает, мы очень просто можем доказать, что корень квадратный из двух - иррациональный.

Так и тут, проще решить проблему для общего случая: "удалить какие-то эелементы массива", а для конкретного: "удалить пустые эелементы" нам останется всего-навсего реализовать предикат распределяющий объекты на "те, которые надо удалять" и те, которые "не надо удалять".

Другой аспект этой проблемы: это очень важно, нужно ли создавать копию переданых данных, или нет. В практике более взрослых языков, это обычно отражается в названии функции (например, добавлением !), или в описании типа данных (изменяемые / не изменяемые). Но и в АС3, несмотря на то, что об этом редко задумываются, это, тем не менее, важно.

Алгоритмы удаления эелементов из массива были обсосаны сотни раз в любой книжке для начинающих, выше - тривиальная реализация, без потуг и претензий.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 11.05.2015 в 02:47.
Старый 11.05.2015, 05:25
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 23  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Я бы записал так, а фильтр, конечно же, потом унес бы в какой-то хелпер и юзал бы.
Код AS3:
var array:Array = ["0", 1, "", 2, false, undefined, null, 3];
array = array.filter(function(item:Object, index:int, list:Array):Boolean { return Boolean(item); });
trace(array);// 0,1,2,3
__________________
местонахождение

Старый 11.05.2015, 14:25
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 24  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Слав, так у него же там не null и undefined, а пустые строки просто

Старый 11.05.2015, 14:36
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 25  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Все циклично. Начинали с таких вопросов, потом были сложнее, а затем размышляли об превосходном уровне абстракции при построении multi-tier архитектур.
Теперь вновь пришли к тому, что на три страницы обсуждаем как подчистить пустые элементы в массиве. Огонь.

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
@caseyryan, ну так отфильтровать пустые строки, я к тому, что на это все есть .filter
__________________
местонахождение

Старый 11.05.2015, 17:45
Фомич вне форума Посмотреть профиль Отправить личное сообщение для Фомич Найти все сообщения от Фомич
  № 27  
Ответить с цитированием
Фомич

Регистрация: Feb 2015
Сообщений: 63
Зашел за названием книжки по регулярным выражениям, которую упоминал caseyryan) Смотрю топик стал очень информативным)
PS В итоге использовал код, который любезно предоставил udaaff, на работу алгоритма жалоб нет.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от СлаваRa Посмотреть сообщение
@caseyryan, ну так отфильтровать пустые строки, я к тому, что на это все есть .filter
У фильтра:
1. Плохой интерфейс (зачем-то нужно, чтобы предикат обязательно принимал индекс и весь массив). Это приводит к тому, что ради фильтра нужно писать специальные функции с заведомо ненужными аргументами (так же, как в 99% случаев с обработчиками событий) - плохо спроектировали.
2. Фильтр обязательно возвращает новый массив, что в некоторых случаях неприемлимо не только из соображений производительности но и по смыслу.
3. Фильтр нельзя расширить до обработки N массивов (обязательно нужен один, т.как зачем-то его сделали методом объекта, при чем не чего-нибудь, а массива или вектора). Опять же, плохое проектирование.

Я не думаю, что при такой стандартной библиотеке зазорно самому писать такие функции. Все шансы за то, что свой велик будет лучше стандартного решения.
__________________
Hell is the possibility of sanity

Старый 12.05.2015, 21:10
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 29  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Это точно. Я написал свой splice без диких аллокейшенов и радуюсь.

ЗЫ. Нуба да, немного жалко. Но он шел уверенно к этому.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 12.05.2015, 21:33
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 30  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Я написал свой splice без диких аллокейшенов и радуюсь.
Нет желания поделиться с публикой?)

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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