WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:ソート

0:[投稿] atusi [2002/06/01 13:31 ][環境:WIN+IE WIN系+Perl]

ハッシュ $ans{'キー'} には数値が入っています。
現在その数値のみを対象にしてソートをかけているのですが、
    @tmpsort = (sort {$ans{$b} <=> $ans{$a} } keys %ans);

それが同じ値の場合
ハッシュ %ans のキーを基にして文字コード順にソートをかけたいのですが、5
どうしたらよいのでしょうか?

    @tmpsort = (sort {
        $ans{$b} <=> $ans{$a} ||    # 数値でソート
        # 上が同じ値、つまり偽の場合文字コードでもソート 右のようなことをしたい @tmpsort = sort keys %ans;
    } keys %ans);


1:[回答] バギンズ [2002/06/02 00:31 ]

とりあえず、そのまま書くとこんな感じかな?

@tmpsort = sort{
 my $rtn = $ans{$a} <=> $ans{$b};
 if ( ! $rtn ) { $rtn = $a cmp $b; }
 $rtn;
} keys %ans ;


2:[回答] nn [2002/06/02 03:12 ]

sort { $ans{$a} <=> $ans{$b} or $a cmp $b } keys %ans;


3:[回答] バギンズ [2002/06/02 21:39 ]

>>2
あれ? or でうまくいくのかな?

<=> や cmp って
真または偽を返すんじゃなくて
左辺 < 右辺 の場合は -1
左辺 = 右辺 の場合は 0
左辺 > 右辺 の場合は 1
を返すから、うまくいかない気が...

ちなみに、私は、atusiさんが「0の場合」の事を「偽の場合」と書いていたので、

if ( $rtn == 0 )
にしないで
if ( ! $rtn )
って書きました。(^_^;)


4:[回答] nn [2002/06/02 23:02 ]

1 or print "1\n";
0 or print "0\n";
-1 or print "-1\n";

Result: 0


5:[回答] バギンズ [2002/06/03 04:06 ]

あ、なるほど、orは偽になる場合しか右のオペランドを実行しないんでしたか。
どうも失礼しました。m(_ _)m


6:[完了] atusi [2002/06/03 19:20 ]

皆様、どうもありがとうございました。
勉強させていただきます。

失礼いたします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World