Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - подскажите, как получить часть полей хеша? / 5 сообщений из 5, страница 1 из 1
30.07.2015, 13:12
    #39019564
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl - подскажите, как получить часть полей хеша?
Есть массив хешей: $rows = [{'f1'=>'v1', 'f2'=>'v2', ...}, {'f1'=>'v1', 'f2'=>'v2', ...}, ...]
Мне нужно их хешей получить только некоторые поля.
Никак не получается сообразить с однострочной конструкцией:
Код: php
1.
$res->{$_->{'username'}} = {@$_{qw(id username group comment)}} foreach (grep {$_->{'group'} !~ /^test_/} @$rows);


По идее, эта строка должна отобрать строки, у которых group начинается в "test_" и в конечном хеше должны остаться только четыре поля. Но что-то неправильно.

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
30.07.2015, 22:52
    #39019938
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl - подскажите, как получить часть полей хеша?
Alibek B.,

Key/Value Hash Slices

Starting in Perl 5.20 , a hash slice operation with the % symbol is a variant of slice operation returning a list of key/value pairs rather than just values:

Код: php
1.
2.
3.
    %h = (blonk => 2, foo => 3, squink => 5, bar => 8);
    %subset = %h{'foo', 'bar'}; # key/value hash slice
    # %subset is now (foo => 3, bar => 8)
...
Рейтинг: 0 / 0
30.07.2015, 23:24
    #39019946
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl - подскажите, как получить часть полей хеша?
Спасибо, оно самое.
Я такую конструкцию пробовал, не сработало, решил что неправильно.
А дело было в том, что у меня Perl 5.14.
...
Рейтинг: 0 / 0
31.07.2015, 04:01
    #39019996
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl - подскажите, как получить часть полей хеша?
если по-старинке, тогда так:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
use  5.14.0;
my   %h = (blonk => 2, foo => 3, squink => 5, bar => 8, book => 220);
my   %subset; 
my   $slice =<<END;

     foo
     |
     bar
     |
     book

END

map  $subset{$_} = $h{$_},
grep m/$slice/ox,
keys %h;

print %subset;



output:
foo3bar8book220
...
Рейтинг: 0 / 0
31.07.2015, 08:12
    #39020026
volodin661
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Perl - подскажите, как получить часть полей хеша?
ну и конкретно для твоего примера:
( к сожалению от промежут. переменной $c избавиться не получается,
но в целом приемлемо )
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
use  5.14.0;

my $rows = [
             { username => 'Peter',
               group    => 'wheel'
             },

             { dog      => 'REXX',
               comment  => 'terrible'
             }
           ];

my %subset;
my $c;
my $slice=<<END;

     username
     |
     group
     |
     comment
END

map $subset{$_}=$c->{$_}, grep /$slice/ox, keys %{$c = $_} for @$rows;

say %subset;
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl - подскажите, как получить часть полей хеша? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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