是否可以以LIFO或FIFO方式使用哈希?如何确保哈希以相同的顺序打印添加的元素?
#!/usr/bin/perl
print "content-type: text/html \n\n";
# BEGINNING HASH
%coins = ( "Quarter" , .25,
"Dime" , .10,
"Nickel", .05 );
# PRINT THE OLD HASH
while (($key, $value) = each(%coins)){
print $key.", ".$value."<br />";
}
# ADD NEW ELEMENT PAIRS
$coins{Penny} = .01;
$coins{HalfDollar} = .50;
# PRINT THE NEW HASH
print "<br />";
while (($key, $value) = each(%coins)){
print $key.", ".$value."<br />";
}
Run Code Online (Sandbox Code Playgroud)
这给了
Nickel, 0.05 Dime, 0.1 Quarter, 0.25 Nickel, 0.05 Dime, 0.1 HalfDollar, 0.5 Penny, 0.01 Quarter, 0.25
您可以保留一个单独的哈希键数组,以便您可以编写
my @coins = qw/ Quarter Dime Nickel Penny HalfDollar /;
for my $key (@coins) {
print "$key, $coins{$key}<br />\n";
}
Run Code Online (Sandbox Code Playgroud)
或者您可以安装和使用该Tie::IxHash模块,这将保持哈希元素按插入顺序保存,如下所示
use strict;
use warnings;
use Tie::IxHash;
tie my %coins, 'Tie::IxHash';
print "content-type: text/html \n\n";
%coins = (
Quarter => 0.25,
Dime => 0.10,
Nickel => 0.05,
);
while (my ($key, $value) = each %coins){
print "$key, $value<br />\n";
}
$coins{Penny} = .01;
$coins{HalfDollar} = .50;
print "<br />\n";
while (my ($key, $value) = each(%coins)){
print "$key, $value<br />\n";
}
Run Code Online (Sandbox Code Playgroud)