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

キーに複数の値を含めることはできません。あなたが得ることができる最も近いのは、値を配列参照にし、その配列に複数の値を持つことです。

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

ただし、あなたが持っているデータについては、構造を逆にする必要があるようです:

%coins = ( 
    5 => "Quarter",
    25  => "Quarter", 
    10 => "Dime"
);
于 2013-03-26T16:19:50.373 に答える
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 に答える
1

正当な perl 置換値のようです。最初のフィールドがキーで、2 番目のフィールドが値だからです。

したがって、問題を解決するための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. ハッシュ/配列 (より良い解決策)

    #!/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 に答える