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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок записи и вывода в хэше 
:(
    Опции темы
nIkTo
Дата 5.11.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Обьясните почему записываешь в хеш в одном порядке а выводит в другом ?

Файл .gTLD :
Цитата

aero:*.aero - Авиация
biz:*.biz - Деловые Организации
com:*.com - Коммерческий
coop:*.coop - Совместные Организации
edu:*.edu - Образовательный
eu:*.eu - Европа
gov:*.gov - Американское правительство
info:*.info - Открытые TLD
int:*.int - Международные Организации
mil:*.mil - Америнское министерство вооруженных сил
mobi:*.mobi - Мобильные телефоны
museum:*.museum - Музеи
name:*.name - Персональный
net:*.net - Сети
org:*.org - Организации
tel:*.tel - Глобальный телекоммуникационный справочник
ac:*.ac - Асценовы Острова
ad:*.ad - Андорра
ae:*.ae - Объединенные Арабские Эмираты
af:*.af - Афганистан


Код

#!/usr/bin/perl -w
use strict;

my (%gTLD) = ();
open(GTLD, ".gtld");
while(my $str = <GTLD>) {
   chomp($str);
   $gTLD{$1} = $3 if ($str =~/(^\w+)(:)([^:]+$)/);
}
close(GTLD);

foreach my $key (keys %gTLD) {
   print $key.":".$gTLD{$key}."\n";
}


Вывод :
Цитата

int:*.int - Международные Организации
af:*.af - Афганистан
biz:*.biz - Деловые Организации
net:*.net - Сети
ad:*.ad - Андорра
tel:*.tel - Глобальный телекоммуникационный справочник
eu:*.eu - Европа
info:*.info - Открытые TLD
org:*.org - Организации
coop:*.coop - Совместные Организации
name:*.name - Персональный
ac:*.ac - Асценовы Острова
gov:*.gov - Американское правительство
edu:*.edu - Образовательный
mil:*.mil - Америнское министерство вооруженных сил
ae:*.ae - Объединенные Арабские Эмираты
aero:*.aero - Авиация
museum:*.museum - Музеи
mobi:*.mobi - Мобильные телефоны
com:*.com - Коммерческий


Почему выводит не в том же порядке ?
PM   Вверх
arto
Дата 5.11.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



perldoc -q "How can I make my hash remember the order I put elements into it?"
PM MAIL ICQ   Вверх
nIkTo
Дата 5.11.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо, но это не помогло мне понять.
PM   Вверх
Pfailed
Дата 5.11.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ISBN 5-93286-020-0, стр 114
Цитата

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



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Вот цитата из PerlCookBook

Проблема
Функции keys и each извлекают элементы хэша в довольно странном порядке.
Вы хотите получить элементы в том порядке, в котором они заносились в хэш.
Решение
Воспользуйтесь модулем Tie:: IxHash.
Код
use Tie::IxHash;
tie %hash, "Tie::IxHash";
# Операции с хэшем %hash
@keys = keys %hash; # Массив @keys отсортирован в порядке вставки

PM MAIL   Вверх
Bulat
Дата 6.11.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



nIkTo, как вариант, если порядок ключей хэша является каким-то алгоритмом, а не просто произвольный порядок, то можно переопределить ту же функцию sort под этот алгоритм. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
nIkTo
Дата 6.11.2009, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


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

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


 




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


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

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