这是与此名称相同的线程(Working with Spreadsheet::ParseExcel)。由于其中一些人认为标题和问题没有意义。很抱歉没有轻松。
我的问题是:像这样的数组
TY45745a A,B
TY45745a C,D
TY45745a E,F
TY5475a G,H
TY5475a I,J
TY5475a K,L
应该像这样的哈希。
TY45745a =>(A,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
我应该如何分组?感谢您的时间和建议
编辑:对不起,Bu不会工作,因为wen通过for循环,部分的outpur将是这样的:
TY45745a
A,B
TY45745a
C,D
TY45745a
E,F
TY5475a
G,H
TY5475a
I,J
TY5475a
K,L
答案 0 :(得分:2)
在问题中使用更新的数组:
my $hash = {};
for my $part (@arr) {
my ($key, $values) = split/ /, $part;
push @{$hash->{$key}}, $_ for split/,/, $values;
}
我不确定你更换[A-F]和[G-L]的意思,因为这会产生你所描述的所需输出而没有任何替换。
答案 1 :(得分:0)
#/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'
]
};