0

我想为一个键提供多个值并打印它们。这是代码,但它用新值替换了键。

#!/usr/bin/perl
%coins = ( 
    "Quarter" , 25,
    "Dime" , 10,
    "Quarter", 5 
);
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) {
    print "$value $coins{$value} \n";
}
4

3 回答 3

4

一个键不能有多个值。您可以获得的最接近的值是将值设为 arrayref,并在该数组中有多个值。

%coins = ( 
    Quarter => [25, 5],
    Dime => [10],
);

虽然,对于您拥有的数据,看起来您应该反转结构:

%coins = ( 
    5 => "Quarter",
    25  => "Quarter", 
    10 => "Dime"
);
于 2013-03-26T16:19:50.373 回答
1

似乎合法的 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";
        }
    }

将数组与哈希表组合

于 2013-03-26T16:55:08.783 回答
1

您可以将值存储在数组中。在哈希中分配其引用。因此,每当您将值推送到数组时,它也可以在哈希中访问。如果您提供匿名数组,则每次都必须手动分配一个值。例如:

@array_value=(1);
%hash=('number' => \@array_value);
push @array_value,3;
print "@{$hash{'number'}}";

每当您想在哈希中添加值时,都可以将其添加到数组“@array_value”中。您可以取消引用哈希中的值数组,如下面的@{$hash{'number'}}。

于 2016-07-07T10:01:27.117 回答