Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хеш с упорядочеными ключами по умолчанию в Perl 
:(
    Опции темы
Logo
Дата 26.7.2012, 03:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Цитата

1) при добавлении нового ключа задавать некий порядковый номер для значения (например timestamp), после чего уже в foreache'e пробегать по отсортированным парам по этому порядковому номеру


Самый простой и в тоже время оптимальный способ - просто хранить в паре ключ/значение ссылку на следующую пару, в ней - еще на следующую, и т.д.

Цитата

3) найти на CPAN'e модуль, который это реализует, разобраться как он работает. Беглым взгядом нашел вот это - http://search.cpan.org/~ovid/Array-AsHash-...Array/AsHash.pm (вроде именно то что вам нужно)


Читайте внимательней вопрос. На CPAN'е полно модулей, это реализующих, да и свой написать не проблема.
Вопрос был как его добавить в Perl, что бы конструкция вида
Код

$hash =  {
  foo => {
    bar => 1,
    baz => 2,
  }
}

Возвращала нужный хеш. Как это сделать на CPAN я не нашел.
PM MAIL   Вверх
TP@MB@Y
Дата 26.7.2012, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Цитата(Logo @  26.7.2012,  03:10 Найти цитируемый пост)
Читайте внимательней вопрос. На CPAN'е полно модулей, это реализующих, да и свой написать не проблема.
Вопрос был как его добавить в Perl, что бы конструкция вида


Вы поймите, что хэши - это одна из составляющих фундамента перла. 
Вы хотите изменить поведение хэшей... Вы уже подумали как это в целом отразится на вашей системе? На подсистемах?

Прошу пояснить, чем Вам не угодил вариант использования специального класса?



PM   Вверх
Logo
Дата 26.7.2012, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Да нет там никакой системы, подсистемы, я здесь использую Perl для того, для чего он предназначен - написание простых скриптов.
Отдельный tied hash, создаваемый через tie или спец функцию плох тем, что нужна довольно большая hash структура со вложенными хэшами, которые тоже должны быть упорядочены. Да и не перловый вовсе синтаксис уже получается.

Добавлено через 1 минуту и 36 секунд
Цитата

Вы хотите изменить поведение хэшей... Вы уже подумали как это в целом отразится на вашей системе? На подсистемах?

Ничего не имею против включения в области видимости пакета или лексической области видимости.
PM MAIL   Вверх
TP@MB@Y
Дата 27.7.2012, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 18.12.2004
Где: Москва

Репутация: нет
Всего: 4



Logo,  если вы пишите "простые" скрипты, то используйте простые решения (3 из них я уже перечислил). То что вы задумали - это совсем не просто и даже опасно smile
PM   Вверх
Logo
Дата 27.7.2012, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Е-мое:) Ничего "опасного" тут нет. Если бы подходили куча классов и пр. сложный, но надежный код, я бы наверно использовал Java, а не Perl.

Добавлено через 5 минут и 57 секунд
В Perl есть оператор tie, который реализует подобные вещи, есть и готовые классы (напр Tie::InsertOrderHash) на CPAN.
Плохо тем, что сложную структуру со вложенными хешами, такую как 
Код

$hash =  {
  foo => {
    bar => 1,
    baz => 2,
  }
}

Через Tie не сделать. Собственно в этом и был вопрос, все есть в первом сообщении.
Pfailed во втором предложил самый простой способ реализовать, не совсем то, но похожее.
PM MAIL   Вверх
Logo
Дата 1.8.2012, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Что интересно, ни один из языков, предназначенных для написания command line скриптов (кроме perl, ruby, python), так же не поддерживают порядок пар в HashMap, создаваемых по умолчанию.
perl6 Rakudo поддерживает, но он (возможно пока) мало подходит для подобных целей, поскольку запускается целую секунду.
Только JavaScript и ActionScript.

Это сообщение отредактировал(а) Logo - 1.8.2012, 21:03
PM MAIL   Вверх
Pfailed
Дата 2.8.2012, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



php поддерживает


--------------------
PM MAIL   Вверх
Logo
Дата 25.8.2012, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Цитата(Pfailed @ 2.8.2012,  18:11)
php поддерживает

Но он тоже мало подходит для консольного скриптинга...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.