連想配列の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さんありがとうございました。
無事、解決する事ができ、とても助かりました。

[上に] [前に] [次に]