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

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

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

Регистрация: Dec 2010
Сообщений: 177
Question Работа с коллекциями

Здравствуйте!
Помогите решить задачу.
Есть множество объектов типа ArrayCollection, со своей структурой.
Для ускорения работы с данными, я хочу структуировать представление ArrayCollection в соответствии со своими задачами.
Для этого я формирую списки индексов элементов ArrayCollection с помощью метода getItemIndex().
Но вот незадача: после сортировки ArrayCollection элементы меняют свой индекс.
Подскажите, как можно проиндексировать объект ArrayCollection, чтобы потом по индексу элемента можно было обратиться к последнему, не взирая на операции вставки, сортировки, удаления.

Старый 12.09.2011, 12:54
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Ох вы написали. Может параллельно набивать/удалять эти элементы в хеш-таблицу?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 12.09.2011, 13:07
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 3  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Цитата:
Сообщение от GBee Посмотреть сообщение
Ох вы написали. Может параллельно набивать/удалять эти элементы в хеш-таблицу?
Думаю такой вариант вполне рабочий. Но это приведёт к дублированию данных и увеличению потребляемой приложением памяти. Также придётся придумать алгоритм синхронизирующий два источника данных. Перефразируя фразу "Шурик, Вы комсомолец? Это же не наш метод!" из известного кинофильма:
- GBee, Вы Flash-разработчик? Это же не наш метод!

Старый 12.09.2011, 13:19
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Почему, просто будет две ссылки на один и тот же объект. Синхронизация - работы на 10 минут. Я за быстродействие :о)

Добавлено через 2 минуты
У себя постоянно использую массив+таблица. Массив для массовых операций, таблица - быстро вытащить нужный элемент.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 12.09.2011, 13:46
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 5  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
GBee, поправьте меня, если я ошибаюсь:
Код AS3:
var testArCol:ArrayCollection = new ArrayCollection(new Array(2,1,8,5));
var elementTestArCol:Object = testArCol.getItemAt(0);
trace(elementTestArCol); // 2
testArCol.removeItemAt(0);
trace(testArCol.getItemAt(0)); // 1
trace(elementTestArCol); // 2
Тобишь, метод getItemAt() вернул нам объект, а не ссылку на него.
Возможно я чего-то недопонимаю в механизме присвоения ссылок в AS.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
В ActionScript 3.0 все аргументы передаются ссылками, поскольку все значения хранятся как объекты. Однако объекты, принадлежащие примитивным типам данных, к которым относятся Boolean, Number, int, uint, и String, имеют специальные операторы, которые позволяют воспроизвести поведение объектов при передаче аргументов значениями.
Отсюда
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

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

Регистрация: Dec 2010
Сообщений: 177
Код AS3:
function passByRef(objParam:Object):void { 
var testAr:Array = new Array(objParam.x, objParam.y);
objParam.x++; 
objParam.y++; 	
trace(objParam.x, objParam.y);				
trace(testAr[0], testAr[1]); 
} 
var objVar:Object = {x:10, y:15}; 
trace(objVar.x, objVar.y); // 10 15 
passByRef(objVar); // 11 16 10 15 
trace(objVar.x, objVar.y); // 11 16
GBee, каким образом я должен на основании заданной коллекции создать коллекцию, "удобоваримую" для меня, не копируя значения исходных данных?
...Хм. Разобрался -
Код AS3:
var testAr:Array = new Array(objParam);
Всё-таки хочется работать с исходным объектом ArrayCollection не прибегая к методам перебора.
Есть такая возможность в Flex-framework?


Последний раз редактировалось zorexundra; 12.09.2011 в 14:49.
Старый 12.09.2011, 14:57
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Всё-таки хочется работать с исходным объектом ArrayCollection не прибегая к методам перебора.
Есть такая возможность в Flex-framework?
Нихт понимайтен :о)) Перефразируйте, пожалуйста. А что вам нужно в итоге? Не в вашем виденьи, а по ТЗ/таску? Может вы зря мучаетесь.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 12.09.2011, 15:22
zorexundra вне форума Посмотреть профиль Отправить личное сообщение для zorexundra Найти все сообщения от zorexundra
  № 9  
Ответить с цитированием
zorexundra

Регистрация: Dec 2010
Сообщений: 177
Есть множество ArrayCollection соответствующих таблицам серверной БД.
Всё это множество нужно систематизировать на стороне клиента и свести в один ArrayCollection.
В этом конечном ArrayCollection должны быть значения идентифицирующие исходные итемы множества ArrayCollection (теперь я так понимаю ссылки на эти итемы), по которым можно быстро обратиться к исходным данным.
Механизм наподобие реляционных БД: есть идентификатор поля, по нему получаем доступ к строке таблицы. Или механизм хеш-таблицы.
Цель - ускорить работу с данными учитывая переменные условия.

Кажется, Вы помогли мне в формировании понимания путей реализации:
необходимо создать коллекцию ссылок на исходные элементы.
Но остаётся иллюзия, что можно как-то пометить элементы исходных коллекций, чтобы потом обратиться к ним по этим меткам. Такой путь более приятен для моих стереотипов.

Старый 12.09.2011, 15:32
saprahan вне форума Посмотреть профиль Отправить личное сообщение для saprahan Найти все сообщения от saprahan
  № 10  
Ответить с цитированием
saprahan

Регистрация: Mar 2011
Сообщений: 48
Цитата:
Сообщение от zorexundra Посмотреть сообщение
Но остаётся иллюзия, что можно как-то пометить элементы исходных коллекций, чтобы потом обратиться к ним по этим меткам. Такой путь более приятен для моих стереотипов.
Это не иллюзия. На практике такой кейс и вправду встречается. Рекомендую при инициализации коллекции заводить также мапу: ключ->айтем. Можно, например, экстендить ArrayCollection, добавить параметр itemsMap, и в конструкторе ArrayCollection'a (а также, возможно в оверрайде метода refresh) прописать инициализацию мапы из сорса. Назвать MappedArrayCollection.

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

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

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


 


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


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