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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.12.2012, 11:56
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 11  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Только у Dictionary скорость доступа к данным по ключу быстрее чем у Object. Ввиду скорости - предпочтении остается за Dictionary
Вот как бы подкрепите свои слова измерениями что ли...
Лично по моим наблюдениям, словарь имеет такую же скорость доступа как у Object или даже медленнее. Array с доступом по числовому индексу (не по строчному) обгоняет и Object и Dictionary.

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

Регистрация: May 2001
Адрес: Москва
Сообщений: 670
Object не может заменить Dictionary, и наоборот. Object чаще всего используют для хранения небольшого объема данных описывающих какую то конкретную сущность (например временные данные, получаемые в ходе вычислений).
Словарь - используют для быстрого доступа к информации об конкурентном объекте. например, есть N кнопок. по клику нужно увеличивать счетчик кликов конкретной кнопки.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
Object не может заменить Dictionary, и наоборот
Склонен поспорить с Вами. В случае со строковыми ключами поведение эдентично. И то и другое представляют собой структуру Map, только Object разрешает исключительно строковые ключи, а Dictionary - любые ключи (правда, ключи простых типов он приводит к строковым и не может по таким ключам держать слабые ссылки).
Код AS3:
var d:Dictionary = new Dictionary();
var o:Object = new Object();
 
d[1] = o;
d["1"] = o;
d[true] = o;
d["true"] = o;
 
var len:int = 0;
 
for (var key:* in d) {
   len++;
}
 
trace(len); // 2
__________________
...вселенская грусть

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

Регистрация: May 2001
Адрес: Москва
Сообщений: 670
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
В случае со строковыми ключами
не совсем понимаю в чем спор.
если формулу 1 использовать как грузовую машины ее скорость будет равна скорости трактора.
ну да. только зачем?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
не совсем понимаю в чем спор
В "наоборот".
__________________
...вселенская грусть

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

Регистрация: May 2001
Адрес: Москва
Сообщений: 670
ну это получается забивание гвоздей микроскопом.
Код AS3:
 
var t:uint = getTimer();
var i:int ;
for (i= 0; i < 100000; i++) 
{
	new Object();
}
trace(getTimer()-t );
t = getTimer();
for (i= 0; i < 100000; i++) 
{
	new Dictionary();
}
trace(getTimer()-t );
только зачем?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Stone, мое высказывание по поводу использования Dictionary/Object будет полезно (мне так кажется) автору темы и всем кто ее будет читать. Я предлагаю остановиться на этом моменте. Да и, думаю, мы с Вами уже вышли из возраста, когда нужно кому-то что-то доказывать. Тем более что никто из нас (вероятно) не пользуется Dictionary в описанном ключе =)
__________________
...вселенская грусть

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Цитата:
Сообщение от kackbip Посмотреть сообщение
Как я понял по последним дебатам местных профессионалов. Имеет смысл использовать только Vector и Dictionary.
Object это вобще не коллекция.
Array же уступает в быстродействии вектору.
Это каких дебатов?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Массивы и векторы - это коллекции в которых разрешены повторения. С точки зрения использования, асимптотическая сложность чтения и записи: O(1), в определенных случаях возможна сортировка. Если сортировка возможна, то ее асимптотичекая сложность: O(n log n). В массивах и векторах, если их можно линейно упорядочить, поиск элемента возможен с асимптотической сложностью O(log n) (т.н. бинарный поиск).
Удаление или добавление из/к таких/м коллекций/ям, это O(n) операция (т.как нужно копировать всю коллекцию).
Массивы отличаются от векторов тем, что не декларируют тип элементов.
Типы векторов в AS3 не совместимы по присваиванию. Это значит, что Vector.<EventDispatcher> не является под-типом Vector.<Object>, тем не менее есть тип, которому принадлежат все векторы: Vector.<*>.

Кроме этого есть много деталей реализации, которые делают теорию не такой простой и однозначной. Но для краткости, не будем вдаваться в подробности.

Хеш-таблицы - это коллекции в которых запрещены повторения. Асимптотическая сложность чтения, записи, удаления и добавления - O(1). Хеш-таблицы по-определению не сортируются, зато поиск в них - опять же, O(1).
Object - не смотря на то, что во многих отношениях ведет себя как хеш-таблица с ключами строкового типа, на самом деле не совсем хеш таблица. Т.как AS3 не различает на уровне синтаксиса вызов метода специализирующегося на каком-то типе и попытку получить значение по ключу из хеш-таблицы, некоторые ключи в Object просто нельзя положить (т.как они совпадают с уже существующими методами).
Dictionary - позволяет использовать произвольные объекты в качестве ключей (в отличие от Object, где это только строки). Но обладает все теми же недостатками. Кроме того, в виду тех же недостатков синтаксиса, изза которых нельзя отличить вызов собственного метода от поиска значения по ключу, хранение ключей примитивных типов в Dictionary работает следующим образом: сначала простые типы конвертируются в строку, а потом хранятся отдельно от ссылочных типов. И, хотя, часто разницей можно принебречь, это может привести к ошибкам приведения типов, которые тяжело обнаружить.
__________________
Hell is the possibility of sanity

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

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

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

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

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


 


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


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