当你需要在哈希表中的每一个键值都存储多个数值,你可以选择在其中存储一个数组而不仅仅是一个变量值。
<!--start banner ad--><!--ba--> <!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript> <noscript></noscript> <!--end banner ad--> |
如果你存储的数据是对应于同一个键值的文本,显而易见,哈希是最好的选择。在哈希的每一个元素中,你只能存储一个变量值。但是使用数组指针就可以使得在哈希的一个元素中存储一个数组指针,指向一个数组。
例如,考虑一下存储那些关联到城市的邮政编码。因为一个城市可以有多个邮政编码,你就需要考虑设计一个数组指针,用于将指针存储到哈希表中去。看看下面这个例子:
{
chomp;
($zip, $state, $city) = split / /;
push @{$zipcodes{"$city, $state"}}, $zip;
}
for $city (sort keys %zipcodes)
{
print "$city: @{$zipcodes{$city}}\n"
}
__DATA__
40502 KY <city></city><place></place>LEXINGTON
40503 KY <city></city><place></place>LEXINGTON
40504 KY <city></city><place></place>LEXINGTON
40505 KY <city></city><place></place>LEXINGTON
40511 KY <city></city><place></place>LEXINGTON
40513 KY <city></city><place></place>LEXINGTON
40514 KY <city></city><place></place>LEXINGTON
40515 KY <city></city><place></place>LEXINGTON
40516 KY <city></city><place></place>LEXINGTON
40517 KY <city></city><place></place>LEXINGTON
40202 KY <city></city><place></place>LOUISVILLE
40213 KY <city></city><place></place>LOUISVILLE
40214 KY <city></city><place></place>LOUISVILLE
40215 KY <city></city><place></place>LOUISVILLE
40217 KY <city></city><place></place>LOUISVILLE
40220 KY <city></city><place></place>LOUISVILLE
40222 KY LYNDON
40241 KY LYNDON
40242 KY LYNDON
如果总是存储一些数组指针,而且只有一个元素,你可以简化代码段。否则,你需要测试哈希的元素,看看这个元素究竟是一个数组指针还是一个简单的变量,这样才能正确地进行操作。
在一个单独的哈希元素中采用使用数组指针来存储多值的方法。
<!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript> <!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript>