"Методы хеша" 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 патча для сущ.методов - дадут исчерпавающие функции по работе с хешем, массивом, стеками, очередями.
- Есть ли какой-то ловкий способ изменить имя ключа в hash, с сохранием его места (по индексу)., andylars 28.05.2016 12:28
- и всё, что-ли? даже в top3 самых больших тредов не добрались! %-) (-), Misha v.3 [M] 16.06.2016 10:15
- Ответ, moko [M] 16.06.2016 14:28
- Огласите top :) (-), andylars 16.06.2016 11:24
- Ответ, Misha v.3 [M] 16.06.2016 14:29 / 16.06.2016 14:30
- Ответ, moko [M] 30.05.2016 00:59
- Всмысле это предложение или уже недокументированная возможность в ночных сборках?, andylars 30.05.2016 11:04 / 30.05.2016 11:05
- Ответ, moko [M] 30.05.2016 12:38
- Методы для работы с порядком элементов в хеше..., Sumo [M] 06.06.2016 11:05 / 06.06.2016 11:06
- Ответ, G_Z [M] 06.06.2016 15:13
- Ответ, moko [M] 06.06.2016 13:48
- Можно вообще не делать новый метод вставки. а расширить add..., Sumo [M] 06.06.2016 14:03
- Ответ, Sumo [M] 06.06.2016 14:00
- Ответ, moko [M] 06.06.2016 14:29
- Ответ, moko [M] 06.06.2016 14:23
- Если «нестандартный вариант» кажется проблемой, то можно и иначе..., Sumo [M] 06.06.2016 15:09
- Ответ, moko [M] 06.06.2016 22:10
- От add - ожидаешь, что он сохранит физ.смысл = сложение/слияние ключей. Картинки прилагаются., andylars 07.06.2016 00:28 / 07.06.2016 00:50
- put это эффективный add одного элемента, moko [M] 07.06.2016 00:43
- Я однозначно не понимаю, как вы сочетаете add и before/after, andylars 07.06.2016 01:00
- Если перестать думать про ключи и значения, то все встает на вои места..., Sumo [M] 07.06.2016 06:29
- Я таки осознал, что надо наоборот - перестать думать об add, как overlapping-методе для множества, тем более, что он выбивается из стройного ряда. (-), andylars 08.06.2016 09:50
- Поэтому, дополнить операции со множествами - операциями с рядами, можно только органически подобными по механике, иначе imho каша., andylars 07.06.2016 10:33 / 07.06.2016 10:51
- Именно так я и воспринимал. Словарь - это множество. А массив - это ряд. И операции для них работают по-разному., andylars 07.06.2016 10:03
- Ответ, G_Z [M] 07.06.2016 02:01
- Ответ, G_Z [M] 06.06.2016 23:14
- Страшновато глазами пользователя... http://www.parser.ru/forum/?id=83206, andylars 06.06.2016 16:18 / 07.06.2016 00:37
- Мне так OK, moko [M] 06.06.2016 15:21
- Вопрос семантики: begin/end будут точнее first/last, но само поведение какое-то нелинейное получается. (-), andylars 06.06.2016 14:27
- Re: Ответ (updated), andylars 06.06.2016 12:08 / 06.06.2016 13:07
- Ответ, Sumo [M] 06.06.2016 13:14
- Как черновой вариант формализации..., andylars 31.05.2016 15:44 / 31.05.2016 23:22
- Ответ, moko [M] 01.06.2016 18:51
- Мудрёно, G_Z [M] 01.06.2016 00:16
- Ответ, andylars 01.06.2016 09:45 / 01.06.2016 09:47
- А еще получить индекс ключа, зная название ключа, как-то реально без перебора всех записей? (-), 28.05.2016 17:16