在散列时为perl中的键赋予多个值

时间:2013-03-26 16:17:29

标签: perl hash

我想给一个键赋予多个值并打印它们。这是代码,但它用新值替换了密钥。

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

3 个答案:

答案 0 :(得分:4)

密钥不能包含多个值。你可以得到的最接近的是将值设为arrayref,并在该数组中有多个值。

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

虽然,对于您拥有的数据,您似乎应该反转结构:

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

答案 1 :(得分: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";
    }

使用这个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”中。 您可以在散列中取消引用值的数组,如下所示 @ {$哈希{ '编号'}}