キーに複数の値を与えて出力したい。これがコードですが、キーを新しい値に置き換えます。
#!/usr/bin/perl
%coins = (
"Quarter" , 25,
"Dime" , 10,
"Quarter", 5
);
foreach $value (sort { $coins{$a} <=> $coins{$b} } keys %coins) {
print "$value $coins{$value} \n";
}
キーに複数の値を含めることはできません。あなたが得ることができる最も近いのは、値を配列参照にし、その配列に複数の値を持つことです。
%coins = (
Quarter => [25, 5],
Dime => [10],
);
ただし、あなたが持っているデータについては、構造を逆にする必要があるようです:
%coins = (
5 => "Quarter",
25 => "Quarter",
10 => "Dime"
);
値を配列に格納できます。ハッシュでその参照を割り当てます。したがって、値を配列にプッシュするときはいつでも、ハッシュでもアクセスできます。匿名配列を指定した場合は、毎回手動で値を割り当てる必要があります。例えば:
@array_value=(1);
%hash=('number' => \@array_value);
push @array_value,3;
print "@{$hash{'number'}}";
ハッシュに値を追加したいときはいつでも、配列「@array_value」に追加できます。以下の @{$hash{'number'}} のように、ハッシュ内の値の配列を逆参照できます。
正当な 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";
}
}
配列とハッシュテーブルを組み合わせる