parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Re: Ответ

andylars 06.06.2016 10:35 / 06.06.2016 11:49

Очевидно, что это невозможно.
Добавление не в конец всегда будет сдвигать всё идущее далее.
Именно так.
И по этой же причине add-replace по индексу - не заменить на последовательный delete + add.

Поэтому, в предложенном "meta-replace" сформулировано правило:
"replace работает строго "поверх" сущ.ключей, без попутного добавления/вставки/удаления и всегда сохраняет итоговое кол-во элементов и порядок индексов."
(**кроме одного из возможного сценария по обработке единственной коллизии - который может давать "усушку" хеша, или возврат false, -1, или исключения).
Метод же meta-insert - делает строго наоборот - вставляет всегда "между" (это и вставка в вершину, и за/после элементом/индексом, и в конец). И что фактически во всех случаях, кроме вставки в конец - приводит к сдвигу/пересчету индексов.
Нужен replace — пишется в пару строк, добавление и удаление старого ключа.
Эта "пара строк" для задачи изменения имени ключа (в текущем положении дел), с сохранием его порядка(индекса), будет прогонять один, а то и два цикла по всему хешу (до совпадения). К "бабке не ходи", на 100 элементов при 1000 таких "replace" - будет ощутимая просадка.

Присваивание и доступ по ключу - есть. Доступ по индексу - тоже есть.
А присваивания по индексу - нет. Replace - это "присваивание по индексу" и есть по сути.