Массив в хеш-перл - PullRequest
       1

Массив в хеш-перл

0 голосов
/ 29 ноября 2011

Это тот же поток с другим именем, как у этого ( Работа с Spreadsheet :: ParseExcel ).Поскольку некоторые из них предложили название и вопрос не имеет смысла.Извините, что не облегчил задачу.

мой вопрос: такой массив

TY45745a A,B
TY45745a C,D
TY45745a E,F
TY5475a G,H
TY5475a I,J
TY5475a K,L

должен быть сделан в такой хеш-код как этот., B, C, D, E, F) TY5475a => (G, H, I, J, K, L)

И следующей частью этого будет переименование файла, А если файлИмена имеют [AE] в конце файла, затем его следует переименовать в TY45745a [1..6], а если он имеет [GL] TY5475a [1..6].

% hash = @array.

но это приведет к

TY45745a => A,B
TY45745a => C,D
TY45745a => E,F
TY5475a =>  G,H
TY5475a =>  I,J
TY5475a =>  K,L

Как мне их сгруппировать?Спасибо за ваше время и предложения

РЕДАКТИРОВАТЬ: Извините, Бу, но это не сработало бы, потому что после прохождения цикла for вылет детали будет выглядеть следующим образом:

TY45745a
A,B
TY45745a
C,D
TY45745a
E,F
TY5475a
G,H
TY5475a
I,J
TY5475a
K,L

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

С обновленным массивом в вопросе это работает:

my $hash = {};

for my $part (@arr) {
    my ($key, $values) = split/ /, $part;
    push @{$hash->{$key}}, $_ for split/,/, $values;
}

Я не уверен, что вы имеете в виду при замене [A-F] и [G-L], поскольку это приводит к тому, что вы назвали желаемым результатом без каких-либо замен.

0 голосов
/ 29 ноября 2011
#/usr/bin/perl
use List::MoreUtils;
use Data::Dumper;

my $h; 
my @a = ("TY45745a", "A,B", 
         "TY45745a", "C,D", 
         "TY45745a", "E,F", 
         "TY5475a",  "G,H", 
         "TY5475a",  "I,J", 
         "TY5475a",  "K,L");

my $it = List::MoreUtils::natatime 2, @a; 

while (my ($k,$v) = $it->()) { 
    print "$k => $v"; 
    push @{$h->{$k}}, split /,/, $v; 
}; 

print Dumper($h)

дает:

TY45745a => A,B
TY45745a => C,D
TY45745a => E,F
TY5475a => G,H
TY5475a => I,J
TY5475a => K,L

$VAR1 = {
      'TY5475a' => [
                     'G',
                     'H',
                     'I',
                     'J',
                     'K',
                     'L'
                   ],
      'TY45745a' => [
                      'A',
                      'B',
                      'C',
                      'D',
                      'E',
                      'F'
                    ]
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...