Как Tie :: IxHash реализован в Perl? - PullRequest
4 голосов
/ 17 марта 2011

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

Из того, что я знаю, упорядоченные ассоциативные массивы обычно реализуются как попытки, которые я никогда раньше не использовал, но знаю, что их производительность соответствует моим ожиданиям (я ожидаю много читать и писать, и нужно будет всегда помнить, что ключи заказа были изначально вставлены). Моя проблема в том, что я не могу понять, так ли был создан Tie :: IxHash, или какую производительность я должен ожидать от него, или есть ли для меня какой-то лучший / более чистый вариант (на самом деле я бы предпочел не сохранять отдельный массив и хеш для выполнения того, что мне нужно, так как это приводит к уродливому коду и неэффективности пространства). Мне также просто любопытно ради любопытства. Если это не было реализовано как три, как это было реализовано? Я знаю, что могу разобраться с исходным кодом, но я надеюсь, что кто-то другой уже сделал это, и я предполагаю, что я не единственный человек, который будет заинтересован в ответе.

Итак ... Идеи? Предложения? Совет?

Ответы [ 2 ]

9 голосов
/ 18 марта 2011

A Tie :: IxHash объект реализован прямым способом, используя обычные строительные блоки Perl, что и следовало ожидать. В частности, такой объект является ссылкой на благословенный массив, содержащий 4 элемента.

  • [0] Ссылка на хеш для хранения ключей хеша пользователя. Это используется каждый раз, когда модуль должен проверить наличие ключа.

  • [1] Ссылка на массив для хранения ключей хеша пользователя в порядке.

  • [2] Ссылка на параллельный массив для хранения значений, также в порядке.

  • [3] Целое число для отслеживания текущей позиции в двух параллельных массивах. Это необходимо для итерации.

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

1 голос
/ 17 марта 2011

Источник расскажет вам, как реализована эта функция, и измерить ее производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...