• ベストアンサー

perl-cgi 文字の長さでソートしたい

文字の長さでソートしたいと思っているのですがどのようにすればよいでしょうか? @word = qw(abc abcd abcdef abc a); とある場合、 @word = qw(a abc abc abcd abcdef); という風に並べ替えたいと思っています。 分かる方、教えて下さい。宜しくお願い致します。

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

@sorted = sort { length($a) <=> length($b) } @word; 細かいこというと、配列要素の長さは最初に一回求めるだけにしておいて キャッシュした値をソートに使うべきなんでしょうけどその辺は お楽しみに取っておくということで。

ayu_mi_nic
質問者

お礼

回答いただきありがとうございます。 とても、助かりました!!

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

その他の回答 (1)

  • ren10
  • ベストアンサー率52% (9/17)
回答No.2

こんなんでどうでしょう? @word = sort {$a cmp $b} qw(abc abcd abcdef abc a);

ayu_mi_nic
質問者

お礼

回答いただきありがとうございます。 無事、ソートすることができました。

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

関連するQ&A

  • ワードアートの文字の大きさをそろえる方法

    ワード2002を使用しています。 ワードアートを使い、見出しを作りたいと思っています。 1 ABC 2 ABCD 3 ABCDE といった具合に3つの見出しを同じ書式のワードアートで作成したいのですが はじめにABCを作り、それをコピーして貼り付け、ABCDに変更すると 先のABCの幅にABCDと4文字入れてしまうので 1文字あたりの大きさが変わってしまいます。 これを、1文字あたりの大きさは変えずに同じ用に作る一番いい方法を教えてください。 よろしくお願いします。

  • どのようにソートすればいいのか教えて下さい

    AとBとCにそれぞれ数値を与えておいて、その数値の大きい順にABCを並べ替えるようにしたいのです。一応、下のようにアルファベットと数値の間にはカンマを入れて分けています。 A, 5-------→B, 9 B, 9-------→C, 7 C, 7-------→A, 5 このように並べ替えたいのですが、うまくいきません。ArrayListを使用しCollectionsクラスのsortメソッドを使ってやれば先頭の文字によるソートはできるのですが、カンマ後の数値での並べ替えの方法がよくわかりません。 いい法方がありましたらおしえてください。

    • ベストアンサー
    • Java
  • 文字の連結

    HTMLでもじの連結をしたいのですが どのようにしたらいいでしょうか? 例) A=abc B=def C=abcdef フォームにて"abcdef"で飛ばしたいのですが…。 この”C”をHTML内で作成するにはどのようにしたらいいですか?

    • ベストアンサー
    • HTML
  • Perlの正規表現でマッチする範囲を限定

    例えば、以下のようなことがしたいのですが可能でしょうか? 変数$bufに複数行の文字列が入っていたとしてこのうち、 タグとエレメント外を対象にしてマッチさせる (例として以下のような文字列にしたい) <a href="abcdef">abcdef</a><br> <b>abc</b>defabcdef<br> abcdef<b>abcdef</b><br> ↓(タグとエレメント外の文字aを<b>a</b>に置き換える) <a href="abcdef">abcdef</a><br> <b>abc</b>def<b>a</b>bcdef<br> <b>a</b>bcdef<b>abcdef</b><br> 実際にはこのときのマッチの対象となる文字と文字数は可変で bになるかもしれないですしabとかになるかもしれません。 ネット上で検索していろいろ試してみたのですが惜しい ところまではいっても完全に正しく動作しませんでした。 (タグやエレメントの中身に反応してしまったり一部分が 置き換えされなかったり<br>タグの後ろが<b></b>のように なったり) 良いアドバイスください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • フォルダ一覧で名前ソート表示のオプション指定方法.

    OS : Windows XP( 最新Windows Update済み) Machine: DELL-8200 2.7GHz HDD60HB MEMORY:1GB ディレクトリ(フォルダ)で一覧を表示する場合に, 名前でソート(並べ替え), 種類でソート(並べ替え) 更新日付でソート(並べ替え) することがあると思います. 最近気づいたのですが, この「名前でソート」では,私の場合, 001abcd.c 002abcd.c 003abcd.c 004abcd.c 1abcd.c 2abcd.c 3abcd.c 4abcd.c をソート(並べ替え)すると, 001abcd.c 1abcd.c 002abcd.c 2abcd.c 003abcd.c 3abcd.c 004abcd.c 4abcd.c となります. これは,数字の場合,0を無視しているように見えます. 「001」と「1」を同一視しているということです. 文字列としてみた場合には, 001abcd.c 002abcd.c 003abcd.c 004abcd.c 1abcd.c 2abcd.c 3abcd.c 4abcd.c とソートされると思うのですが,どの部分を変更すれば そのように動作させられるのでしょうか. ご存知のかたおられましたら,よろしくお願いします. それでは.

  • Perlの文字列ソートについて

    こんにちわ。 例えば、 あいう,2002/04/12, ななな,2002/04/14, あいう,2002/04/20, というlogがあったとして、これを表示させるときには、 あいう 2002/04/12 あいう 2002/04/20 ななな 2002/04/14 といった具合に出力させたいのですが、そのsortのさせ方がわかりません。 my @lines = sort by_no(@lines); sub by_no { my $no1 = (split(/,/,$a))[0]; my $no2 = (split(/,/,$b))[0]; $no2 cmp $no1; } ではどこがいけないのでしょうか? 教えてください。お願いします。

    • 締切済み
    • CGI
  • Perlのソートについて

    ハッシュを利用して今ソートできるプログラムを作成したのですが、 重複するデータは除外されてしまうようで、どうしたら除外されずに ソートできるかを教えていただきたいです。 <例> 文字 よみ  No      橋  はし  1      橋  はし  3      箸  はし  2 というデータがあったとして、今のプログラムを実行すると・・・ <結果> 箸  はし  2 キーがよみなので3番目のデータだけ残ります。キーを漢字に したとしても1番目のデータは残らないのですが、どうしてらよいのでしょうか。 <理想的な結果>      橋  はし  1      箸  はし  2      橋  はし  3 一番いいのが上のような結果で、Excelのソートのような感じで、第1キーはよみで第2キーはNoとかのソートはPerlでできないでしょうかね?? どなたか分かる方がいたら教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • マクロ(複数文字置換)についての質問です。

    現在、ExcelのA列に置換前の文字、B列に置換後の文字が入っているシート(シート名:"辞書")があります。 そのシートを辞書的役割で使用し別のシートの内容を置換したいと考えています(現在候補が1000文字程度あり、1つずつ置換をすることが難しいです) また、完全一致のみの置換、大文字とから小文字の置換も可能にし、件数も何件存在するかわかりません。 例:ABCをabcに変換したい場合、 ○ABC→abc ×ABCDEF→abcDEF のような感じです。 しかし、1つのセルの中に空白がある場合は置換可能とします。 例:ABC DEF→abc DEF このようなことは可能でしょうか? 何卒よろしくお願いいたします。

  • 文字列から配列作成

    お世話になっております。 〔abc〕あいうえお<BR>〔def〕かきくけこ<BR>・・・ という構成になっている $M から @A = qw(abc def ・・・); @B = qw(あいうえお かきくけこ ・・・); という配列を取り出したいのですが、どのような方法がありますでしょうか。 御教示宜しくお願い致します。

    • ベストアンサー
    • Perl
  • 数字文字列のソート方法

    文字列に数字を含むデータのソートを行うプログラムを C言語で作成したいのですが、どうすれば良いでしょうか? 具体的に言うと、a12、a2、a10という順序で並んでいる データを昇順にソートした場合にa10、a12,a2というように ソートせず、ちゃんとa2,a10,a12とソートされるように したいのですが、簡単にできるものでしょうか? 質問がわかりにくいかもしれないのですが、どうかご回答をお願いします。