массив Actionscript с индексом и ключом - PullRequest
1 голос
/ 27 июня 2010

Каков наилучший способ создать массив, который может иметь индекс и ключ одновременно?

Я имею в виду что-то вроде этого

index     | key           | value
0         | "myItem"      | "Some value"
1         | "anotherItem" | "Some other value"
2         | "blabla"      | "Bla Bla"

Я знаю, что могусоздайте нормальный массив / вектор, а затем используйте объект / словарь для сопоставления ключей с индексом в текущем массиве.

Но если массив изменится, то словарь должен будет изменить все индексы, которые могли бы повлиятьпотому что элемент был удален, например.Я могу пойти дальше и создать класс, который пытается синхронизировать карту с массивом и т.д. ... Но я не думаю, что это лучший способ сделать это вообще ...:)

Я хочу использовать егоиметь список ... который содержит элементы в очереди, например.Вы должны быть в состоянии получить конкретный элемент по его ключу:

item = list["myItem"]

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

Каков наилучший способ сделать что-то подобное в as3?

1 Ответ

1 голос
/ 27 июня 2010

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

Предполагается, что ваши товары имеют значение, но также и идентификатор: {value:"someValue, id="myItem"}.

. В любом случае, линейный поиск не является плохой идеей, если у вас нет лотов элементов в вашей очереди и очень часто извлекайте их по id (особенно в тесном цикле).

Теперь, если вы хотите пройти весь путь, вы можете расширить функциональность Array, расширив класс Proxy, чтобы сделать доступ к индексу / идентификатору прозрачным (т. Е. Ваш код получал бы элементы с queue[0] или queue['myItem']).Вам все равно придется синхронизировать элементы внутри, если у вас есть обратный индекс, или вы можете просто динамически искать их (с линейным поиском).

Проверьте этот ответ для указателей на то, как это сделать: расширение операторов доступа к массиву AS3 для «обертывания» значений индекса за пределами границ

...