• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランキングリストを作りたいんですが・・・)

初心者でも分かりやすいランキングリストの作り方

このQ&Aのポイント
  • ランキングリストを作りたい場合、初心者でも分かりやすい方法があります。まず、データを読み込み、特定の項目で並び替えたい場合は、その項目を基準に並び替える方法があります。
  • 例えば、$lvという項目を基準に並び替えたい場合は、データを読み込んでから$lvの値を取得し、それを基準にしてデータを並び替えることができます。そして、並び替えたデータを出力すれば、$lvの順に並んだランキングリストが作成されます。
  • この方法は初心者でも簡単に理解できるため、ランキングリストを作りたい場合におすすめです。試行錯誤しながら実践してみてください。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 こういうのはどうでしょう?  @data には、   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www";   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www";  というデータが入っているものとし、 foreach ( @data ) {   ($name,$lv,$hp,$gp) = split(/,/,$_);   $_ = "$lv,$name,$hp,$gp"; } @data = sort { $a <=> $b } @data; foreach ( @data ) {   ($lv,$name,$hp,$gp) = split(/,/,$_);   $_ = "$name,$lv,$hp,$gp"; }  あまりスマートなロジックじゃないですけど、これで $lv 順になります。  昇順と降順を入れ替えるときは sort 関数の $a と $b を逆にします。 (見栄えのためにタブ文字を全角スペースにしてますので、コピーペーストするときはご注意を)

AKIRAGOO
質問者

お礼

早速の御指導ありがとうございます。 教えて頂いたスクリプトを利用して、   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www";   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www"; の内容表示を、 local($data) = @_; $data =~ s/\n$//; foreach ( @data ) {   ($name,$lv,$hp,$gp) = split(/,/,$_);   $_ = "$lv,$name,$hp,$gp"; } @data = sort { $a <=> $b } @data; foreach ( @data ) {   ($lv,$name,$hp,$gp) = split(/,/,$_);   $_ = "$name,$lv,$hp,$gp"; } としたんですが、何故か『$data[2]にはいってるデータ内容』だけが、$data[0]~$data[3] の分だけ出力されてしまいました・・・。 うまく説明できないんですが、   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www";   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www"; の順に出すはずが、出力されたのが $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" になってしまったんです。 どこを修正したらよいのか教えて頂けないでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A