parser

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

 

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

"Методы хеша" v.3. На утро, все значительно ужалось! :) ( Графическая схема прилагается.)

andylars 02.06.2016 13:02 / 02.06.2016 13:42

>> Наглядная графическая схема

Как видится сейчас (см.схема по ссылке выше), существует однозначно две разных механики (и как следствие метода) - для вставки ключа в hash, смешение их в одну кучу, создает неочевидные поведения и зоопарк опций.

Теперь, можно рассмотреть каждый в отдельности:

replace - заменяет только поверх существующего места (по индексу или ключу), размер хеша - гарантировано не меняется.
insert - вставляет только между ключей (до/после индекса или ключа), размер хеша при удачности операции увеличивается на 1.

Вроде стало выглядеть по-лучше:
----------------------------------------------------
 ^hash.replace[at][key;value]
    at = индекс / ключ / last или first /, где надо произвести замену
    key = имя нового ключа (если не указать, то заменится только значение)
    value = значение (если не указать, то заменится только имя ключа)

    * при некорректном at, операций не производится, метод возвращает = false
    ** правило для единственной коллизии:
      когда мы заменяем по at=index, но в хеше, 
      также, присутствует одноименный ключ = key, 
      операция не производится, и метод возвращает = false
      

 ^hash.insert[at][key;value][option]
    at = индекс / ключ / last или first /, где надо произвести вставку
    key = имя нового ключа (обязательно)
    value = значение (обязательно? в хеше вроде можно пустые значения в ключах)
    option = after/before (необязательная опция, по-умолчанияю after)

    * при некорректном at, операций не производится, метод возвращает = false
    ** правило для единственной коллизии:
      если мы вставляем по at=index, но в хеше, 
      также, присутствует одноименный ключ = key, 
      операция не производится, и метод возвращает = false
----------------------------------------------------




И вроде всё, остальной зоопарк, что я "формализовал" - вылетает "в трубу" за ненадобностью. Единственное, что откровенно будет не хватать при полноценной игре по индексу, это получение индекса - по имени ключа. Наоборот ^hash.at(index) мы уже умеем, а в обратную сторону - еще нет (вроде).
----------------------------------------------------
 Можно просто красиво разрешить первому аргументу (по аналогии с подходов выше)
 принимать не только index и last/first, но и имя ключа, тогда "паззл сходится".

 ^hash.at(0), ^hash.at[first/last], 
 ^hash.at[key] = возвращает номер индекса ключа или void (если не сущ.)


 и с ^hash.delete[] - надо поступить аналогично

 ^hash.delete(index) - удаление по индексу
 ^hash.delete[key] - удаление по ключу (уже есть)
 ^hash.delete[first/last] - удаление первого/последнего ключа
----------------------------------------------------


И вуаля, будет очень красиво и лаконично.
2 метода и 2 патча для сущ.методов - дадут исчерпавающие функции по работе с хешем, массивом, стеками, очередями.