Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » PERL многомерный хэш. Вывести первый ключ

Ответить
Настройки темы
PERL многомерный хэш. Вывести первый ключ

Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


Допустим у нас есть многомерный %hash
Код: Выделить весь код
my %hash;

$hash{car}{old}=1200;
$hash{car}{new}=1300;
$hash{car}{sold}=1000;

$hash{ball}{old}=120;
$hash{ball}{new}=0;
$hash{ball}{sold}=1000;
нужно получить ключ-1 ('ball') по паре ключ-2=значение ('old'=120). можно ли это сделать короткой записью, без перебора всех ключей?

Отправлено: 16:48, 17-12-2015

 

Новый участник


Сообщения: 22
Благодарности: 3

Профиль | Отправить PM | Цитировать


Порядок подхэшей (old, new, sold) по умолчанию не сохраняется.
Код: Выделить весь код
my %hash;

$hash{'car'}{'old'}=1200;
$hash{'car'}{'new'}=1300;
$hash{'car'}{'sold'}=1000;

$hash{'ball'}{'old'}=120;
$hash{'ball'}{'new'}=0;
$hash{'ball'}{'sold'}=1000;

for (keys %{$hash{'ball'}}) { print "$_\n" }

Отправлено: 01:14, 19-05-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


** конечная задача была уже решена год с лишним назад, и, вроде, там решил по-другому организовывать данные. так что решение носит только характер "а интересно как/возможно ли"

это понятно, но интересовало другое. я хотел достать ключ-1, зная ключ-2 и его значение

вообще получается такой алгоритм:

Код: Выделить весь код
my $found_key;
foreach my $key(keys %hash) {
  if ($hash{$key}{old} eq 120) {
      $found_key = $key;
      break;
   }
}
я искал вариант как раз без перебора всех ключ-1.

Отправлено: 13:41, 19-05-2017 | #3


Новый участник


Сообщения: 22
Благодарности: 3

Профиль | Отправить PM | Цитировать


Во первых не break, а last, во вторых такое лучше сделать grep'ом:
Код: Выделить весь код
my $found_key = (grep { $hash{$_}{'old'} eq 120 } (keys %hash))[0];
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:43, 19-05-2017 | #4


Аватара для Тишина

Пользователь


Сообщения: 127
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Ardenen:
Во первых не break, а last, во вторых такое лучше сделать grep'ом:
Код:
my $found_key = (grep { $hash{$_}{'old'} eq 120 } (keys %hash))[0]; »
вот, то что нужно было не вкурсе, быстрее ли работать будет, но то что запись минималистичней - точно, а это уже радует

p.s. возьму на заметку!

Отправлено: 14:10, 01-06-2017 | #5



Компьютерный форум OSzone.net » Linux и FreeBSD » Программирование в *nix » PERL многомерный хэш. Вывести первый ключ

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Info - Что это за хэш? Scaltro Защита компьютерных систем 0 21-07-2014 22:53
FreeBSD - ХЭШ Ruslan19891989 Общий по FreeBSD 0 02-11-2011 17:36
Разное - не меняется ключ на ключ с GGK . mitiya Microsoft Windows 2000/XP 1 24-12-2009 11:08
Теория - Указатель на многомерный массив (Pascal) Kowu Программирование и базы данных 2 02-11-2009 22:09
Первый раз как в первый класс - Установка FreeBSD gaddiman Общий по FreeBSD 21 01-04-2006 22:10




 
Переход