• ベストアンサー

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

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

  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • 今ポケモンブームが自分の中でもう一度やってきて赤(初代)からやりはじめ

    今ポケモンブームが自分の中でもう一度やってきて赤(初代)からやりはじめています。タノスィー レッドにはお約束のピカチュウを並べて冒険させたいと思い、電気ポケモンはピカチュウ一筋で進んでいる今日この頃・・・。(初めてやった時はひたすら強いポケモン一筋でしたが) ピカチュウをライチュウに進化させると基本ステータスなどの面でもライチュウの方が強くなると思うのですが、見た目の理由からライチュウには進化させたくありません。 多分私と同じ思いでピカチュウの進化について悩んだ方いませんか? そしてピカチュウのままエンディングを迎えられた方いらっしゃいましたら是非ピカチュウのまま勝ち進むコツを教えて下さい! ただ単にレベルが高かったらOKという理由ならそれでもOKです。

  • ポケモンに芸能人の名前をつけるなら?

    この時期になると、劇場版『ポケットモンスター』が上演しています!!(^^)昔程ではありませんが、僕は、高校生の時に兄妹の影響で、ゲームボーイ用の『ポケモン』にハマり、それぞれのキャラクターに『芸能人&スポーツ選手』の名前をつけてました、覚えている範囲だと、当時は、ピカチュウ=ヒロコ(SPEEDの島袋寛子さん)&ライチュウ=エリコ(同じくSPEEDの今井絵理子さん)&プリン=ミユキ(中島みゆきさん)&サンド=アキナ(中森明菜さん)&ワンリキー=キヨハラ(清原和博さん)etcです!!(^^)今回、皆さんに聞いてみたい質問は『ポケモン』のキャラクターに『芸能人&スポーツ選手』の名前つけるなら誰ですか?(^^)因みに僕の場合、今だと、ピカチュウ=タカミナ(AKB48の高橋みなみさん)&ライチュウ=コジハル(同じくAKB48の小嶋陽菜さん)&ピチュウ=ミーチャン(同じくAKB48の峯岸みなみさん)&ワンリキー=グッサン(山口智充さん)&バタフリー=カエラ(木村カエラさん)&カビゴン=マツコ(マツコDXさん)です!!(^^)

  • ポケモンのめざめるパワーの事を詳しく教えていただきたいんですが

    めざめるパワーをこのサイトで検索してもウェブで検索しても、いまいちわからなかった部分があったんで質問します! めざめるパワーの計算法などはサイトに良く置いてありますが、何を打ち込めばいいかわからないのです! 個体値は最初に手に入れたときのポケモンのステータスを打ち込めばいいのか、そのつどステータスを打ち込むのか?という事がわからないんです! めざめるパワーは正直言って使えますか? 強いんですか? 今アサナンに覚えさせようときょうせいギプス装備でレベル上げさせているんですが・・・。 -------------------------- 『めざパカリキュレーター さん』 http://yakkun.com/cgi/poke/mezapa/main.cgi 16進数(0~1F) 10進数(0~31)の意味が全くわかりません!どっちをクリックすればいいんですか? 色々なサイトがあるんですがどれでやっても同じでしょうかね?

  • 昇順と降順

    C言語でクイックソートを行うプログラムを探していたところ、希望していたものが見つかりました。 このプログラムは与えられた数列を昇順に並び替えるものなのですが、これを降順に並び替えるにはどうしたらよいでしょうか? いろいろ試してみたのですが、無限ループになってしまいます。 #include <stdio.h> void QSort(int x[ ], int left, int right); void Swap(int x[ ], int i, int j); void ShowData(int x[ ], int n); void main(void); /* クイックソートを行う */ void QSort(int x[ ], int left, int right) { int i, j; int pivot; i = left; /* ソートする配列の一番小さい要素の添字 */ j = right; /* ソートする配列の一番大きい要素の添字 */ pivot = x[(left + right) / 2]; /* 基準値を配列の中央付近にとる */ while (1) { /* 無限ループ */ while (x[i] < pivot) /* pivot より大きい値が */ i++; /* 出るまで i を増加させる */ while (pivot < x[j]) /* pivot より小さい値が */ j--; /* 出るまで j を減少させる */ if (i >= j) /* i >= j なら */ break; /* 無限ループから抜ける */ Swap(x, i, j); /* x[i] と x[j]を交換 */ i++; /* 次のデータ */ j--; } ShowData(x, 10); /* 途中経過を表示 */ if (left < i - 1) /* 基準値の左に 2 以上要素があれば */ QSort(x, left, i - 1); /* 左の配列を Q ソートする */ if (j + 1 < right) /* 基準値の右に 2 以上要素があれば */ QSort(x, j + 1, right); /* 右の配列を Q ソートする */ } /* 配列の要素を交換する */ void Swap(int x[ ], int i, int j) { int temp; temp = x[i]; x[i] = x[j]; x[j] = temp; } /* n 個のデータを表示する */ void ShowData(int x[ ], int n) { int i; for (i = 0; i < n ; i++) printf("%d ", x[i]); printf("\n"); } void main(void) { /* ソートする配列 */ int x[ ] = {6, 3, 1, 7, 0, 4, 8, 5, 2, 9}; int n = 10; printf("ソート前:\n"); ShowData(x, n); printf("ソート中:\n"); QSort(x, 0, n - 1); printf("ソート後:\n"); ShowData(x, n); }

  • 降順で並び替えて昇順で受け取りたい

    sqlite3 を使用しています。 名前 | 成績 A | 80 B | 65 C | 90 D | 77 E | 46 F | 30 例えば上記のようなテーブルがあったとします。 成績がいい人3人のレコードを昇順で取得したいのですが、どのようにすればいいか困っています。 select * from テーブル order by 成績 desc limit 3; だと上位3人を抽出できるのですが、いい人の順番 C | 90 A | 80 D | 77 となってしまいますよね。 そうではなく、 D | 77 A | 80 C | 90 という結果が欲しいのです。 よろしくおねがいします。

  • 昇順と降順って・・・

    アルファベットのA->Zに向かうのは昇順でしょうか?それとも降順でしょうか? Yahooの辞書によると、 >しょうじゅん【昇順】 >単語などを五十音順,またはアルファベット順に配列する場合に, >ん→あ,Z→A の順で配列すること となっていますが、エクセルの並べ替えだと逆になっています。 どちらが正しいのでしょうか?

  • ポケットモンスターパールのクリアについて

    ポケットモンスターパールのクリアについて http://www18.atwiki.jp/pokemondp/pages/29.html#id_8a0d4fd9 このページの バトルサーチャーを使ったトレーナーとの再対戦のところに 表が載っていて クリア後には何箇所かのトレーナーさんのポケモンレベルが上がっていて 経験値を結構沢山もらえるという事で挑戦してみたのですが 210番道路のふたごちゃんはLV60まで上がっているとのことでしたが 私が再対戦したらLV40のままでした。(後ライチュウじゃなくてピカチュウのままだったし) で、何度か再対戦してみようとは思うのですが もしかしたら何かしていないイベントがあるのではないかと思ってしまって… 四天王クリアした後、ファイトエリア・リゾートエリア・サバイバルエリア・ハードマウンテンも行ったしぜんこくずかんももらったし 一応殿堂入りの時のエンディングも全て最後まで目を通しました。 まだ、していないことってありますか?

  • 表をソートできるようにしたい

    シンプルなテーブルで、書籍のリスト表を公開していますが、これを、ボタンか何かをクリックすると題名順、作家順などで、行を並べ替えたものを表示するしたいのです(エクセルみたいに)。aspなどのプログラミングを使わないと無理ですか?(プログラミングは全然知りません。フリーで公開されているcgiを設置するくらいならできますが) 今のところは並べ替えたhtmlファイルを用意しておいてSSIで呼び出すという方法を考えているのですが、なにか他に良い方法がありましたらご教授ください。

    • ベストアンサー
    • HTML
  • サーバーにあるファイルを日付順にリスト表示

    FTPではなくブラウザーからファイルをアップロードしたくて、以下の フリーのCGIプログラムを見つけたので利用しています。 http://digit.que.ne.jp/work/wiki.cgi?WalRack2 アップロードされたファイルはリスト表示され、削除やダウンロードが可能ですが、リスト表示がファイル名順になってしまいます。。 アップロードした日付順に書き換えたいのですが、どこをどうしたらよいのか・・ もしご存知の方いらっしゃいましたら、お教えいただけないでしょうか?

    • 締切済み
    • CGI
  • リストボックスのスクロールバーをマウスで動かしたい

    エクセル2007です。 Sheet1のA列に 1行目から順に 1 2 3 4 5 6 7 8 9 10 といれました。 ユーザーフォームを新規作成し、リストボックスを設置しました。 VBAコードは、 Private Sub UserForm_Initialize() Me.ListBox1.RowSource = "Sheet1!a1:a10" End Sub にしました。 VBE画面でF5を押して、フォームを表示させるとリストボックスにスクロールバーが表示されますが、 フォームをクリックして、マウスホイールでぐりぐりしても、リストは動きません。 画像のように、4にカーソルをあて、グリグリしてもダメです。 どうしたら動くようになるのでしょうか?

専門家に質問してみよう