Попытка перевести свое видение на язык теории (т.е ваш "лагерь" от практики, а я из "сферического вакуума")
andylars 07.06.2016 15:37
/ 07.06.2016 15:59
Попробую очередной раз формализовать то, что мне доставляет подсознательный дискомфорт во всем этом подходе к index/key. И почему.
1.
Парсеровский хеш = Упорядоченный Словарь
2.
Упорядоченный Словарь = { ключи(множество) + индексы(ряд) -> значения(набор) }
То есть 2 проекции: множества + ряда -> на набор значений
3.
Множество = набор уникальных элементов, которое имеет характерную природу операций со множествами (overlaying)
4.
Ряд = упорядоченное множество(!) уникальных элементов (индексы). Т.е. ряд наследует все свойства "множества" (и операций над ним) + добавляет природу своих операций, связанных конкретно с последовательностью (insertion).
Схема_1 "Упорядоченный словарь"5. При работе по ключу или индексу, в любом случае происходит работа в два этапа:
I этап - операции с выбранной проекций (ключ или индекс)
II этап - упорядочивание второй проекции (индекс или ключ), после операций с I
Схема_2 "Режим работы по ключам"Схема_3 "Режим работы по индексам"Т.е. сначала происходят правила для операций "множества или ряда" на I-ом этапе (выбранный режим), и с результатом происходит применение правил (целостности) для "множества" или "ряда" на II-том этапе.
Это де-факто и происходит. Когда мы складываем ключи, а индексы перестраиваюся. Теперь, когда мы производим операции над индексами, ключи уже II-ом этапе - приводятся в соответствии с "множеством" (коллизия одноименных ключей).
6. Т.к. обе проекции на значение = ключи + индексы - сами связаны между собой, то во многих случаях свойство "ряда" для индексов (как самостоятельного множества) - вырождается, и поставляет только порядок в чистом виде для "множества" ключей.
Однако, если производить операции с двумя хешами, используя смещение по индексу, то индексы хешей работают как "полноценные ряды": то есть, можно отдельно провести операции для индексов, как для самостоятельного множества (add,union,sub),
Схема_4: "Операции со множествами для ключей и для индексов"А также, ряд имеет свои, своейственные только ему операции со "вставками"/"срезами":
Cхема_5: "Insertion-операции только для рядов (индексов).Вывод: понятно, что кажого результата, приведенного в схемах, можно достичь и методами (из другой природы), то есть поменять порядок элементов - методами работы со множествами, или вставить/сместить - путем пересечения/вычитания, но это не должно быть самоцелью, так и умножать можно только операциями сложения.
Самое важное, как кажется - это выдать ожидаемую и понятную модель поведения, даже если результата можно достичь несколькими путями, что всегда будет справделиво, а для простых случаев, всегда будет более, чем 2 способа сделать одно и то же.
Однако, это не должно быть призывом к действию "выкинуть всё", чем можно достичь того же, и попутно сломать теорет.модель - смешивав операции множества и ряда в одну кучу, так можно вообще сделать ^хеш.do[ $.brainfuck_options[] ]
Тем более, что индексам (как ряду, и как самостоятельному множеству) - есть что добавить отдельно, от себя, к каждому из прошлых методов (которые только для множеств (ключей).
- Есть ли какой-то ловкий способ изменить имя ключа в 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