我想给一个键赋予多个值并打印它们。这是代码,但它用新值替换了密钥。
#!/usr/bin/perl
%coins = (
"Quarter" , 25,
"Dime" , 10,
"Quarter", 5
);
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) {
print "$value $coins{$value} \n";
}
答案 0 :(得分:4)
密钥不能包含多个值。你可以得到的最接近的是将值设为arrayref,并在该数组中有多个值。
%coins = (
Quarter => [25, 5],
Dime => [10],
);
虽然,对于您拥有的数据,您似乎应该反转结构:
%coins = (
5 => "Quarter",
25 => "Quarter",
10 => "Dime"
);
答案 1 :(得分:1)
所以你有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";
}
使用这个methoid,你不能有2个“值”和相同的“键”......显而易见
<强> 2。哈希/数组(更好的解决方案)
#!/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";
}
}
将数组与哈希表
组合答案 2 :(得分:1)
您可以将值存储在数组中。 在哈希中分配它的引用。 因此,无论何时将值推送到数组,它都可以在哈希中访问。 如果您提供了匿名数组,则必须每次手动分配一个值。 例如:
@array_value=(1);
%hash=('number' => \@array_value);
push @array_value,3;
print "@{$hash{'number'}}";
每当您想要在哈希中添加值时,您可以将其添加到数组“@array_value”中。 您可以在散列中取消引用值的数组,如下所示 @ {$哈希{ '编号'}}