![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Modus ponens
|
[1, 2, 1]
Элемент `1' повторяется в коллекции 2 раза: {"a" : 1, "a" : 2} Повторения запрещены, `a' нельзя повторять.
__________________
Hell is the possibility of sanity |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Умм... А правильно тут сравнивать ключ объекта и значение массива? Значения то и там и там могут повторяться, а ключи нет.
|
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Dictionary к стати наследуется от Object, может там конечно многое переопределяется, но всё-же.
|
|
|||||
|
Цитата:
udaаff правДобавлено через 4 минуты Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Array - хитрореализованный список, до того хитрый, что добавление элементов с конца работает медленнее чем с 0-го (что нонсенс для Vector из С++ или List из C#)
Доступ по индексу за 0(1), удаление произвольного элемента за 0(N) - можно считать просто динамическим массивом. В отличие от Vector - у Array доступ по индексу в 2 раза медленнее и не кидает исключений при выходе индекса за границы Непонятно зачем, но может работать как хештаблица Однако, если в качестве ключа в него попадёт "132423345" и сконвертится в числовой индекс - моментально огребёте с памятью. Ну и если большие числовые индексы задавать - тоже самое будет - я бы в качестве хеша не юзал. Еще при использовании в качестве ассоциативного массива свойство lengh - вообще показывает неизвестно что, а не общее количество элементов. Vector - Предсказуемый тип, работает практически так же как Vector из stl С++ или List из C# Возможна типизация элементов Но невозможны преобразования: var a:Vector<DisplayObject> = new Vector<Sprite>();// не сработает - а ведь Sprite - наследник DisplayObject Причём, то, что он предок всего - не означает, что всё может работать как хеш-таблица. Такая вот забавная организация типов. Если использовать как хеш-таблицу: - любой ключ конвертирует в строку - поэтому с памятю как в случае с Array не огребёте - но из-за этой конвертации теряет в производительности, если использовать числовые ключи (object[13234] эквивалентно object["13234"]) Dictionary Тоже хештаблица, но ключами могут быть любые объекты. Со строковыми ключами работает с той же скоростью, что и Object, с числовыми не помню - но по крайней мере не шибко медленнее Object. Применяется если в качестве ключа удобнее использовать объект, а не строку или число. |
|
|||||
|
Регистрация: Jul 2008
Сообщений: 912
|
Вот наглядный тест:
Можно делать так-же связанные списки, в тесе они есть, то-же очень быстрые конкуренты аррею и вектору, а вот словарь и объект сильно проигрывают всем. Последний раз редактировалось Sintesis; 18.12.2012 в 18:51. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Цитата:
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 319
|
Цитата:
var d:Dictionary = new Dictionary(); d["100"] = 0; d["a"] = 0; for (var key:* in d) { trace(key, "is Number", key is Number); trace(key, "is String", key is String); } //100 is Number true //100 is String false //a is Number false //a is String true Ключи типа String только в Object Ключи типа int, uint, Number, ссылки на объекты в Dictionary |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 60
|
Цитата:
А есть хеш-карты, в них ключи задаются произвольно самим пользователем и запрета на повторы нет. Хеш, по которому производится поиск, в картах считается именно для ключей. Поэтому не могут повторяться ключи, но сами элементы вполне могут содержаться в карте несколько раз. Экземпляры Object - это как раз скорей карты и повторы в них не запрещены. |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|