我想为一个键提供多个值并打印它们。这是代码,但它用新值替换了键。
#!/usr/bin/perl
%coins = (
"Quarter" , 25,
"Dime" , 10,
"Quarter", 5
);
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) {
print "$value $coins{$value} \n";
}
一个键不能有多个值。您可以获得的最接近的值是将值设为 arrayref,并在该数组中有多个值。
%coins = (
Quarter => [25, 5],
Dime => [10],
);
虽然,对于您拥有的数据,看起来您应该反转结构:
%coins = (
5 => "Quarter",
25 => "Quarter",
10 => "Dime"
);
似乎合法的 perl 替换值。因为第一个字段是键,第二个是值。
所以你有2个解决方案来解决你的问题:
1.反转键/值(最坏的解决方案)
#!/usr/bin/perl
%coins = (
25, "Quarter",
10, "Dime",
5, "Quarter"
);
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) {
print "$value $coins{$value} \n";
}
使用这个方法,你不能有 2 个具有相同“键”的“值”......很明显
2. Hash/Array(更好的解决方案)
#!/usr/bin/perl
%coins = (
"Quarter" => [25, 5, 15],
"Dime" => [10]
);
foreach $value (keys %coins) {
my @valueArray=@{$coins{$value}};
foreach my $index (sort { $a <=> $b } @valueArray) {
print "$value $index \n";
}
}
将数组与哈希表组合
您可以将值存储在数组中。在哈希中分配其引用。因此,每当您将值推送到数组时,它也可以在哈希中访问。如果您提供匿名数组,则每次都必须手动分配一个值。例如:
@array_value=(1);
%hash=('number' => \@array_value);
push @array_value,3;
print "@{$hash{'number'}}";
每当您想在哈希中添加值时,都可以将其添加到数组“@array_value”中。您可以取消引用哈希中的值数组,如下面的@{$hash{'number'}}。