連想配列のvalueでsortした場合のkeyの取得について
[上に]
[前に]
[次に]
tomo_pyon
[E-Mail]
2000/03/22(水) 11:35:01
foreach文を使用し、連想配列の値(value)でsortした場合、キー(key)が取得出来ないのですが、どのようにすれば取得できますか?
S-pore
[HomePage]
2000/03/22(水) 13:35:11
foreach (sort { $nazo{$a} <=> $nazo{$b} } keys %nazo)
{ print "key = $_ , value = $nazo{$_}\n"; }
こんな感じにすればいいと思いますが・・・。
(数値順ではなく文字列順にソートする場合は <=> を cmp に変えてください。)
kept
2000/03/22(水) 13:36:18
tomo_pyonさん
>foreach文を使用し、連想配列の値(value)でsortした場合
がよくわからないのですが、
連想配列(%hash)で、値でソートしたキーを取得するには
@key = sort { $hash{$a} <=> $hash{$b} || $a <=> $b} keys %hash;
といった方法がよく使われていると思います。
この例では値、キー共に数の場合です。
値が文字列の場合は
$hash{$a} <=> $hash{$b}
を
$hash{$a} cmp $hash{$b]
に、
キーが文字列の場合は
$a <=> $b
を
$a cmp $b
にしてください。
ソートの昇順と降順は
$a と $b を入れ替えることで変更できます。
kept
2000/03/22(水) 13:46:49
おそかった。・・・
私の例では値が同じの場合、キーで比較しています。
必要なければ、S-poreさんのように値の比較だけのほうが
わかりやすいですね。
foreachはキーの取得で使うのですね。
てっきりソートのするのに使いたいのかと思いこんでしまいました。
>foreach文を使用し、
の「、」の意味を考えればすぐにわかったのに。
tomo_pyon
[E-Mail]
2000/03/22(水) 14:44:09
[[解決]]
S-poreさん、keptさんありがとうございました。
無事、解決する事ができ、とても助かりました。
[上に]
[前に]
[次に]