【发布时间】:2011-11-30 23:40:52
【问题描述】:
问题是我有一个数组,其中键值对作为数组中的元素,我必须以某种方式将它们拆分为散列中的键 => 值对。
我第一次尝试这个工作,但我认为它非常混乱 - 我必须获取数组的所有其他元素,然后过滤以找到接受的键以创建散列
my $HASH;
my $ARRAY = [ key1, val1, key2, val2, __key3__, val3, __key4__, val4 ];
my @keys = map{ $ARRAY[ $_*2 ] } 0 .. int($#ARRAY/2);
my @vals = map{ $ARRAY[ $_*2+1 ] } 0 .. int($#ARRAY/2);
my $i = 0;
#filter for keys that only have __key__ format
for $key (@keys){
if( $key && $key =~ m/^__(.*)__$/i ){
$HASH{$1} = $vals[$i];
}
$i++;
}
# only key3 and key4 should be in $HASH now
我发现了这个sample code,我认为它与我正在寻找的很接近,但我不知道如何在数组上实现类似的东西,而不是在文本文件的行上迭代:
$file = 'myfile.txt'
open I, '<', $file
my %hash;
%hash = map { split /\s*,\s*,/,$_,2 } grep (!/^$/,<I>);
print STDERR "[ITEM] $_ => $hash{$_}\n" for keys %hash;
你们中的任何一位 perl 专家都可以帮助我了解最好的方法吗?即使我可以以某种方式将所有元素连接成一个字符串,然后每隔一个空格标记分割一次——这也可能有效,但现在我卡住了!
【问题讨论】:
-
$ARRAY = [...]和$ARRAY[...]指的是两个不同的变量! -
@nodebunny => 将
use warnings; use strict;添加到您所有程序的顶部,以捕获类似上述mob注释的问题。 -
感谢我使用 Moose,所以它已经在上面了!
标签: arrays perl hash map key-value