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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вложенные хэши, сортировка, Алгоритм сортировки по внутренним ключам 
:(
    Опции темы
Ramirez
Дата 18.1.2005, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



Уважаемый All!

Помогите написать алгоритм (или хоть намекните), который сортирует структуру из вложенных хешей по внутренним ключам. Например, есть структура типа:

$hash{key1}{key2} = value

вот пример:

$hash{a}{name} = "aaa";
$hash{b}{name} = "bbb";
$hash{c}{name} = "ccc";

Так вот я хочу ее отсортировать по значениям key2.
Тоесть чтобы первые ключи шли не как a,b,c а согласно стортировке по занчению name.

И что-то никак не соображу как...

Варианты типа:
foreach $key (sort { $hash{$a} cmp $hash{$b} } keys %hash) { }

тут видимо не прокатывают...

Цель всего этого, потом вывести при помощи foreach:

foreach (keys %hash) {
print $hash{$_}{name}."\n";
}

Это сообщение отредактировал(а) Ramirez - 18.1.2005, 03:10
PM ICQ   Вверх
chaos
Дата 18.1.2005, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



чето не совсем могу вникнуть в твою проблему, вот тебе пример по тому что понял
Код

$hash{a}{name} = "aaa";
$hash{b}{name} = "bbb";
$hash{c}{name} = "ccc";

foreach $key1 (keys %hash) {
 for $key2 (sort keys %{$hash{$key1}}) {
   print "$hash{$key1}{$key2}\n";
 }
}

если не то говори еще подумаем
PM WWW   Вверх
Ramirez
Дата 18.1.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



Не совсем то. Попробую обьяснить подробнее. Допустим у меня есть учетные записи пользователей, каждый имеет уникальный идентификатор и кучу параметров (имя, email и пр.).
Я запихиваю их в hash таким образом:

Код

$hash{ID1}{NAME} = "User1";
$hash{ID1}{EMAIL} = "MAIL1";
......
$hash{ID2}{NAME} = "User2";
$hash{ID2}{EMAIL} = "MAIL2";
.....


Если сказать:

Код

foreach (sort keys %hash) {
 print $hash{$_}{NAME}."\n";
}


то они будут выведены отсортированными по коду (ID1, ID2 ...), а мне хочется их вывести отсортированными по имени (тоесть по значению NAME)...

Это сообщение отредактировал(а) Ramirez - 18.1.2005, 10:15
PM ICQ   Вверх
dimes
Дата 18.1.2005, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

sort { $hash{$a}{'name'} cmp $hash{$b}{'name'} } keys %hash

PM ICQ   Вверх
Ramirez
Дата 18.1.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



2dimes: блин, и правда сортирует! smile А я голову ломал 2 дня... smile
А вот если по 2-м полям сортировать сразу?
PM ICQ   Вверх
dimes
Дата 18.1.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Ramirez @ 18.1.2005, 11:57)
вот если по 2-м полям сортировать сразу?

Код

sort { ( $hash{$a}{'name'} cmp $hash{$b}{'name'} ) or  ( $hash{$a}{'field2'} cmp $hash{$b}{'field2'} ) } keys %hash


Но правильнее наверное будет свою функцию использывать...

PM ICQ   Вверх
GoodBoy
Дата 19.1.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(Ramirez @ 18.1.2005, 10:57)
вот если по 2-м полям сортировать сразу?

тут можно сделать так:

Код

sort { ( $hash{$a}{'name'} cmp $hash{$b}{'name'} ) ? ( $hash{$a}{'name'} cmp $hash{$b}{'name'} ) : ( $hash{$a}{'field2'} cmp $hash{$b}{'field2'} ) }



--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
dimes
Дата 19.1.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



GoodBoy
????
Мой пример не рабочий или твой более правильный?
PM ICQ   Вверх
Ramirez
Дата 19.1.2005, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

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



Цитата(dimes @ 19.1.2005, 16:31)
Мой пример не рабочий или твой более правильный?


Рабочий, рабочий! Подтверждаю smile
PM ICQ   Вверх
GoodBoy
Дата 20.1.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Цитата(dimes @ 19.1.2005, 16:31)
Мой пример не рабочий или твой более правильный?

Идеологию Перла помнишь??? smile


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
dimes
Дата 20.1.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(GoodBoy @ 20.1.2005, 15:02)
Идеологию Перла помнишь???

А то smile

Это сообщение отредактировал(а) dimes - 20.1.2005, 14:51
PM ICQ   Вверх
GoodBoy
Дата 20.1.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



dimes
ну тогда сам понимаешь, что оба варианта - равноценны! :-))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
dimes
Дата 20.1.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Неа smile
Мой короче и масштабируемее smile
PM ICQ   Вверх
GoodBoy
Дата 20.1.2005, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



dimes
дык и мой - масштабируемый!!! smile подумай!!! smile


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
korob2001
Дата 21.1.2005, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



GoodBoy и dimes ;)))))) Ваши примеры, оба рабочие и ничего удивительного здесь нет. Только не ссорьтесь. ;)))))))


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
dimes
Дата 21.1.2005, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



smile
PM ICQ   Вверх
GoodBoy
Дата 21.1.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



korob2001
Дык никто и не ссорится!!!!!! Тут пытается родиться истинна!!!! :-))))))))))))


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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