Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: grep для хеша / 2 сообщений из 2, страница 1 из 1
18.07.2019, 21:14
    #39838948
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: grep для хеша
Есть такой хеш:
Код: php
1.
$list->{'devices'} = { mac => { 'id'=>id, 'account'=>account}, ... };


Вместо mac, id, account подставляются соответствующие значения.
Мне нужно "отфильтровать" хеш, оставив только те элементы, у которых account совпадает с определенным значением, сохранив ключи.
Например так:
Код: php
1.
my $filter = {map { $_->{'id'} => {'id'=>$list->{'devices'}->{$_}->{'id'}, 'account'=>$list->{'devices'}->{$_}->{'account'}} } grep {($list->{'devices'}->{$_}->{'account'}//0) == 123} keys %{$list->{'devices'}}};


Но это очень громоздко. А можно ли такую фильтрацию сделать более компактно?
Например значения отфильтровать можно так:
Код: php
1.
my $filter = [grep {({$_}->{'account'}//0) == 123} values %{$list->{'devices'}}];


Но мне нужно также получить ключи отфильтрованных элементов.
...
Рейтинг: 0 / 0
21.07.2019, 23:17
    #39839747
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl: grep для хеша
Код: perl
1.
2.
3.
while (my($k,$v)=each%{$list->{devices}}) {
    print $k if $v->{account} == 123
}
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: grep для хеша / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]