"Не мы начали эту войну" (c) ибо ^хеш.at[first | last] - уже был и есть в Парсер, а ^хеш.foreach - давно убил "академический словарь".
andylars 03.06.2016 14:17
Cмесь ключей и индексов не нравится совершенно
- Cмешение индексов и ключей, началась с ^hash.at
- ^hash.at с наличия упорядоченности ключей
- упорядоченность ключей с потребности в foreach.
Я не вижу ничего страшного в том, что парсеровский хеш, как минимум, с этого момента просто перестал быть академическим "словарем-коллекцией", с доступом лишь по ключу, без порядка следования. Уже с обозначенных выше моментов, он просто исторически продолжил так называться, но быть им перестал.
Если бы у нас был массив - то как и во многих языках - мы бы сами "женили список со словарем" и получали коллекции, очереди, упорядоченные словари. Но у нас есть только таблица, значения которой не могут быть ссылки на объекты, а только string.
Однако, это совершенно не значит, что структура данных, которую реализует теперешний hash - плохая, не_правильная, или не существует в природе.
На основе базовых примитивов - массивы, мы получаем более абстрактные - (списки,словари,кортежи), на основе их еще более абстрактные (коллекции), из коллекций мы уже можем лепить и стеки и очереди (OrderedDict как в Python), но высокоуровневые абстракции построенные из более примитивных элементов - как праивило, не теряют своих свойств (доступа к элементам).
Поэтому, такая структура как "упорядоченный словарь с доступом по ключу или индексу" - вовсе не "мракобесие", а вполне реальная и востребованная.
Более того, паттерн, где у "массива с данными" мы имеем более одной ID-шкалы - мы используем повсеместно начиная от DB. Мы можем даже отказаться от упорядоченности в хеше - и завести отдельный массив (массивов у нас в Парсере - нет, значит таблицу), где будем просто хранить отдельно массив порядка ключей с нумерацией, и выкатив единый интерфейс ко всему этому.
У меня сейчас (и уже N лет как) есть хеши с числовыми ключами
О чем, я и говорю - выше. Практически можно и на массивах все было делать, остальное абстракции. Просто смысл иметь цифровые ключи, а потом их упорядочивать самому, а потом вы в эти цифровые ключи кладете еще и ключ Name?... Получается просто "самообман" и "надстройка", а всё то же самое, только руками и с накладными расходами.
3.last/first: отдельно касательно именования, я согласен, мне тоже не нравится такая "вивисекция" (я просто привел по аналогии, с тем, что уже было см.сабж). В таком разе, надо и в $hash.fields - тоже камушек метнуть.
Служебные имена (Built-in Objects), действительно, было бы разумнее обрамлять или хотя бы предварять, подчеркиванием, или двумя (по аналогии с Питоном),
то есть __last, __first и $hash.__fields - как минимум.
4. Сами вещи мне нравятся. Где это может пригодиться? collection.p в PF - это именно изобретение велосипеда, которого нет в Парсер. Но также у Парсера нет и стандартного массива чтобы доиграть свои структуры, а "нумерованые ключи" хеша, это просто костыль само по себе.
Докрученный hash - превратит его в OrderedDict, дающий по обратной совместимости и "коллекции" и "массивы" и "стеки", "очереди" - из коробки.
^hash.insert[__first]... - это вставка в вершину стека/очереди. last - соответственно в конец. Это базовые вещи таких структур и они нужны.
И раз уж исторически так сложилось, и ^hash.at(0) уже давно с нами - то не вижу ничего страшного доиграть его до доступа по номеру элемента. Ничего при этому не ломается - приведите пример, как это может сломаться? Оно по-определению не может, если будет состоять из двух/трех разных примитивов - сам по себе.
- Есть ли какой-то ловкий способ изменить имя ключа в 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
- Переосмыслил получившееся, получился откровенный наплыв двух совершенно разных методов., andylars 02.06.2016 10:37 / 02.06.2016 10:38
- Ответ, moko [M] 02.06.2016 11:36
- "Методы хеша" v.3. На утро, все значительно ужалось! :) ( Графическая схема прилагается.), andylars 02.06.2016 13:02 / 02.06.2016 13:42
- Ответ, moko [M] 03.06.2016 19:47
- Ответ, andylars 04.06.2016 00:11
- Ответ, moko [M] 04.06.2016 02:38
- Ответ, G_Z [M] 03.06.2016 04:15
- Ответ, andylars 04.06.2016 00:15 / 04.06.2016 00:15
- Ответ, G_Z [M] 04.06.2016 00:25
- Ответ, andylars 04.06.2016 00:40
- смесь ключей и индексов не нравится совершенно, Misha v.3 [M] 02.06.2016 23:30
- "Не мы начали эту войну" (c) ибо ^хеш.at[first | last] - уже был и есть в Парсер, а ^хеш.foreach - давно убил "академический словарь"., andylars 03.06.2016 14:17
- Ответ, moko [M] 03.06.2016 18:49
- Ответ, Misha v.3 [M] 03.06.2016 14:48
- +100500 :) (-), Sumo [M] 03.06.2016 05:33
- Re: * 0 :), andylars 04.06.2016 00:02 / 04.06.2016 00:02
- Ввести Array — очень хорошая идея (-), BotFabric 03.06.2016 00:04
- Согласен практически со всеми доводами. Плюс, нарисовалась коллизия, которую можно вырулить., andylars 02.06.2016 03:00
- Мудрёно, G_Z [M] 01.06.2016 00:16
- Ответ, andylars 01.06.2016 09:45 / 01.06.2016 09:47
- А еще получить индекс ключа, зная название ключа, как-то реально без перебора всех записей? (-), 28.05.2016 17:16