LINUX.ORG.RU

Perl: объединение списков с чередрванием?


0

0

В наличии:

@lstKeys=(24,25,26,27);
@lstValues=('Mon','Tue','Wen','Fri');

Требуется получить:

%hshCalendar=НекаяФункция(@lstKeys,@lstValues);

Так, чтобы в результате:
$hshCalendar{24}='Mon';
$hshCalendar{25}='Tue';
etc.

Вопрос: КАК?

Реальная задача состоит в том, чтобы разобрать /etc/passwd и получить хэш вида:
uidNumber=>1001
gidNumber=>510
gecos=>'Staff producer'
Думаю, что для этого перебор по списку split /:/ в цикле for не обязателен, или я неправ?

★★★★★

Вот шит, кажется, такая возможность есть только в Perl 6 - это оператор zip. Такая нужная вещь, казалось бы, а догадались добавить её в Perl только сейчас!

DRVTiny ★★★★★
() автор топика

Можно даже красивее сделать но тут, вроде, симметричные массивы должны быть:

my %hash = ();

@hash{@lstKeys} = @lstValues;

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

IMHO это слишком сложный код для такой элементарной вещи. Я уж не говорю о том, что переменную i инициализировать нужно.
Сравните со следующим однострочным кодом:
%hshUid=zip((uidNumber,gidNumber,gecos,homeDirectory,loginShell),split /:/);

Кстати... не факт, что здесь не нужно сначала создавать временные массивы @attrUid=(uidNumber,gidNumber,gecos,homeDirectory,loginShell) и @valUid=split /:/ ...

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

> %hshUid=zip((uidNumber,gidNumber,gecos,homeDirectory,loginShell),split /:/);

my %hshUid = ();

@hshUid{ 'uidNumber', 'gidNumber', 'gecos', 'homeDirectory', 'loginShell' } = ( split( /:/ ) )[1..6];

ы?

:-))))

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

#!/usr/bin/perl
my @lstKeys=('first','second','third','fourth');
my @lstValues=('Jan','Feb','Mar','Apr');
my %hash=();
@hash{@lstKeys}=(@lstValues);
print $hash{second};

Работает!!! Дайте же мне крепко пожать Вашу мужественную лапу, спасибо огромное, Anoxemian! :-))

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от DRVTiny

> Я не понимаю, что такое @hash{}

Cрез хэша.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.