• ベストアンサー

データを降順・昇順に並び替えるには

現在ポケモン図鑑を作っていまして、(^^; 下記のようなものが書かれたファイルを読み込んで表示しています。 ・・・ 25,ピカチュウ,でんき,6, 26,ライチュウ,でんき,30, 27,サンド,じめん,12, ・・・ 1行ずつがそのポケモンのデータで、4つ目には「重さ」が入るようになっています。 それで、ポケモンをリスト表示してその中から選ぶようになっているんですけど、それを重さが重い順、あるいは軽い順にして表示するにはどうすればいいのでしょうか。 回答する気おきないと思いますが、 よろしくお願いします。 参考>http://poke.sub.jp/poke_cgi/web_poke/main.cgi

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そ~いうリストが @cards という配列にあるとすれば, @sorted_cards = sort { (split(/,/, $a))[3] < (split(/,/, $b))[3]; } @cards; で昇順にソートできます.

active0904
質問者

お礼

原理が分かりませんでしたがすごいです! ありがとうございました。

その他の回答 (1)

  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.2

sortのデフォルトは文字(バイナリ)ソートなので、 体重は数値としてソートした方がいいんじゃないかと・・ @pokemon_listにデータがあるとして・・ my @sorted_list = sort {  # (*1)昇順の場合  (split /,/, $a)[3] <=> (split /,/, $b)[3]; } @pokemon_list; 降順の場合は、(*1)が、  (split /,/, $b)[3] <=> (split /,/, $a)[3]; となりまする。 ちなみに、[perl sort]でググると・・

参考URL:
http://www.rfs.jp/sitebuilder/perl/05/func/sort.html
active0904
質問者

お礼

うーん・・ やってみましたが、よく分かりませんでした^^;No.1の方の回答を参考にさせていただきます。 でもお陰で降順の方法が分かりました。 ありがとうございました。

関連するQ&A