2010-08-05 73 views
13

我有一個數組並試圖陣列內容轉換到與鍵和值的散列。索引0是一個關鍵的,索引1是一個值,索引2是一個鍵時,索引3是一個值,等等如何將數組轉換爲Perl中的散列?

但它不產生預期的結果。該代碼是下面:

open (FILE, "message.xml") || die "Cannot open\n"; 

$var = <FILE>; 

while ($var ne "") 
{ 
chomp ($var); 
@temp = split (/[\s\t]\s*/,$var); 
push(@array,@temp); 
$var = <FILE>; 
} 

$i = 0; 
$num = @array; 
    while ($i < $num) 
{ 
if (($array[$i] =~ /^\w+/i) || ($array[$i] =~ /\d+/)) 
{ 
# print "Matched\n"; 
# print "\t$array[$i]\n"; 
    push (@new, $array[$i]); 
} 
$i ++; 
} 
print "@new\n"; 


use Tie::IxHash; 
tie %hash, "Tie::IxHash"; 

%hash = map {split ' ', $_, 2} @new; 

while ((my $k, my $v) = each %hash) 
{ 
print "\t $k => $v\n"; 
} 

產生的輸出不正確:

name Protocol_discriminator attribute Mandatory type nibble value 7 min 0 max F name Security_header attribute Mandatory type nibble value 778 min 0X00 max 9940486857 
     name => Security_header 
     attribute => Mandatory 
     type => nibble 
     value => 778 
     min => 0X00 
     max => 9940486857 

在可以看到的是,散列僅與一個部分形成的輸出,並且該陣列的另一部分是不在哈希中創建。

任何人都可以幫忙嗎?它

回答

35

不外乎:

%hash = @array; 
+11

假設在@array的數據被存儲爲鍵,值,鍵,值等 – Hawk 2012-03-29 19:43:09

+4

@霍克和他的選民:請花時間閱讀這個問題。 OP在他/她的問題中已經說明了這一點。 – m0skit0 2013-05-21 15:11:03

+5

感謝@Hawk,對於我們這些誰只讀標題,直接跳到答案非常有用的注意事項;) – rustyx 2013-09-23 10:29:13

24

在相關的註釋,給@array所有元素轉換成%hash鍵。這裏結束了有些人可能真的想這樣,而不是...

這允許使用存在功能:

my %hash; 
$hash{$_}++ for (@array); 
+18

或'%哈希=地圖{$ _ => 1} @array;'(這從多次出現的元素解決方案不同被設置爲1)。 – 2013-08-06 01:15:24