WEB相談室

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

タイトル:cgi ソートについて

0:[投稿] がちゃ [2005/06/21 02:05 ][環境:WINXP Apache]

投票CGIで、投票数に関係なく名前順にソート結果を表示したいのですがどのようにすれば良いでしょうか?(現在は投票数順です。)


    foreach $message (@messages) {
            $message =~ s/\n//;
            ($number,$name,$url,$value) = split(/\t/,$message);

    $votes{$name}++;
}

    print <<"_HTML_";

<select name="vote">

<option value="0" selected="selected">名前</option>

_HTML_

        foreach (sort { $votes{$b} <=> $votes{$a} } keys %votes) {

            print "<option>$_</option>\n";
        }
    print "</select>\n";

ご教授お願いします。


1:[回答] andi [URL] [2005/06/21 14:57 ]

> foreach (sort { $votes{$b} <=> $votes{$a} } keys %votes)

このsort関数の中身は%votesで得たキー情報($a,$b)を元に、%votesの値でソートをしています。
そこをもう少し考えてみるとうまくいくと思いますよ。


2:[回答] B-Cus [2005/06/21 14:59 ]

> foreach (sort { $votes{$b} <=> $votes{$a} } keys %votes) {
foreach (sort keys %votes)

foreach (sort {$b cmp $a} keys %votes)
で。


3:[完了] がちゃ [2005/06/21 15:10 ]

お答え頂いた方、ありがとうございました。
>>2のforeach (sort keys %votes) で解決しました。

こちらにきく前にいろいろ考えて、深みにはまり
@messages = sort { (split (/\t/,lc $a))[1] cmp (split (/\t/,lc $b))[1]  or (split(/\t/,$b))[2] cmp (split(/\t/,$a))[2] } @messages;
とか方向違いに進んでしまいました。
もっと勉強して、回答側に回れるよう努力したいと思います。
ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World