ベストアンサー 五十音の並べ替えsortを教えて下さい。 2007/10/08 20:30 はう ぱあ ばい ↓sort はう ばい ぱあ 五十音でsortして以下のようにする方法を教えて下さい。 ぱあ ばい はう よろしくお願いします。 みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー putra0 ベストアンサー率50% (4/8) 2007/10/09 13:36 回答No.2 国語辞典のようにソートしたければ Lingua::JA::Sort::JIS モジュールでできますよ。 # ソースコードのエンコーディングが Shift_JIS の場合 use strict; use Lingua::JA::Sort::JIS; use Encode qw/from_to/; my $jis = Lingua::JA::Sort::JIS->new; my @words = qw/はう ぱあ ばい/; # UTF-8 バイト列に変換(必須) map { from_to($_, "Shift_JIS" => "UTF-8") } @words; for my $word ($jis->jsort(@words)) { # 必要に応じてエンコーディングを変換 from_to($word, "UTF-8" => "Shift_JIS"); print $word, "\n"; } エンコーディングの変換が面倒ですが、UTF-8 のファイルから読んでそのまま書き出せばもっとすっきりします。 参考URL: http://search.cpan.org/~sadahiro/Lingua-JA-Sort-JIS-0.05/JIS.pod 質問者 お礼 2008/01/19 20:26 ありがとうございました。 参考http://search.cpan.org/src/SADAHIRO/Lingua-JA-Sort-JIS-0.05/JIS.pm #awk版 function aiu(moji1){ out1=moji1; sub(/[あぁアァアァ]/ ,"あ",out1); sub(/[かがカガヵカガ]/ ,"か",out1); sub(/[さざサザサザ]/ ,"さ",out1); sub(/[ただタダタダ]/ ,"た",out1); sub(/[なナナ]/ ,"な",out1); sub(/[はばぱハバパハバパ]/ ,"は",out1); sub(/[まママ]/ ,"ま",out1); sub(/[やゃヤャヤャ]/ ,"や",out1); sub(/[らララ]/ ,"ら",out1); sub(/[わゎワヮワ]/ ,"わ",out1); sub(/[いぃイィイィ]/ ,"い",out1); sub(/[きぎキギキギ]/ ,"き",out1); sub(/[しじシジシジ]/ ,"し",out1); sub(/[ちぢチヂチヂ]/ ,"ち",out1); sub(/[にニニ]/ ,"に",out1); sub(/[ひびぴヒビピヒビピ]/ ,"ひ",out1); sub(/[みミミ]/ ,"み",out1); sub(/[りリリ]/ ,"り",out1); sub(/[ゐヰ]/ ,"ゐ",out1); sub(/[うぅウヴゥウヴゥ]/ ,"う",out1); sub(/[くぐクグクグ]/ ,"く",out1); sub(/[すずスズスズ]/ ,"す",out1); sub(/[つづっツヅッツヅッ]/ ,"つ",out1); sub(/[ぬヌヌ]/ ,"ぬ",out1); sub(/[ふぶぷフブプフブプ]/ ,"ふ",out1); sub(/[むムム]/ ,"む",out1); sub(/[ゆゅユュユュ]/ ,"ゆ",out1); sub(/[るルル]/ ,"る",out1); sub(/[えぇエェエェ]/ ,"え",out1); sub(/[けげケゲヶケゲ]/ ,"け",out1); sub(/[せぜセゼセゼ]/ ,"せ",out1); sub(/[てでテデテデ]/ ,"て",out1); sub(/[ねネネ]/ ,"ね",out1); sub(/[へべぺヘベペヘベペ]/ ,"へ",out1); sub(/[めメメ]/ ,"め",out1); sub(/[れレレ]/ ,"れ",out1); sub(/[ゑヱ]/ ,"ゑ",out1); sub(/[おぉオォオォ]/ ,"お",out1); sub(/[こごコゴコゴ]/ ,"こ",out1); sub(/[そぞソゾソゾ]/ ,"そ",out1); sub(/[とどトドトド]/ ,"と",out1); sub(/[のノノ]/ ,"の",out1); sub(/[ほぼぽホボポホボポ]/ ,"ほ",out1); sub(/[もモモ]/ ,"も",out1); sub(/[よょヨョヨョ]/ ,"よ",out1); sub(/[ろロロ]/ ,"ろ",out1); sub(/[をヲヲ]/ ,"を",out1); sub(/[んンン]/ ,"ん",out1); return out1} 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 その他の回答 (1) koko_u_ ベストアンサー率18% (459/2509) 2007/10/08 21:28 回答No.1 もうすこしはっきりと要件を書くべきです。 濁音や半濁音は「同じ」と見做してソートしたいということですか? 質問者 お礼 2008/01/19 21:06 ありがとうございました。 辞書式順序です。 http://ja.wikipedia.org/wiki/%E4%BA%94%E5%8D%81%E9%9F%B3%E9%A0%86 http://www.sanseido.net/main/dictionary/hanrei/gaichimei.aspx#3 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Perl 関連するQ&A ExcelかAccessで五十音順にソートしたい Office2007を使っています。ExcelかAccessで五十音順にソートしたいのですが、漢字も一緒にソートしたいと思っています。Excelで五十音でソートすると、最初にアルファベット、続いてカタカナ、続いて漢字というようにソートされます。アルファベットは別にして、カタカナ、漢字は一緒に五十音でソートしてもらいたいのですが、そのような方法はないでしょうか? 例えば アンドウ コンドウ 安藤 イトウ というデータがあれば アンドウ 安藤 イトウ コンドウ というようにデータがソートされてもらいたいです。 Excelの関数のphoneticはExcelからのデータじゃないので 使えません。なにとぞご教授お願いします。 中央値をソートせずに求める 中央値をソートせずに求める方法がわかりません オーダーはO(N)以下です バケツソートは分かりますが、データがめっちゃ大きい時とかどうせうるんでしょうか? 文字列をソートする方法 数値をソートする方法にはバブルソートやクイックソートなどがあり アルゴリズムは分かるのですが 文字列を五十音順にソートしたい場合にはどのようにしたら良いですか? 検索をかけてみたのですが、大抵プログラミング言語に備わったsortの方法が紹介されており 自分で処理を行う方法については書かれていません。 ExcelのSort機能を使わない方法で教えてください。 ネットワークエンジニアとは?技術職の未来を考える OKWAVE コラム Access2010のsortについて Access2010でデータベース内のデータをsortしたいのですが、意図するようにsortできません。 どのように処理すればよいか、お知恵をお貸しください。 具体的な内容は以下のとおりです。 sortする項目は住所の番地以降のデータです。 10-2 5-6 1-12 1-6 上田マンション101 というデータを 1-6 上田マンション101 1-12 5-6 10-2 というふうに並べ替えたいのですが、単純にsortすると 1-12 1-6 上田マンション101 10-2 5-6 となります。 01-06 とか ” 1- 6”のように桁の位置を意識して登録すれば うまくsortできるのでしょうが、住所を入力する立場からすると不自然で 面倒だと思います。 データを変換しないで、うまくsortする方法はないでしょうか? ソートの作りかた! ソートの作りかた! ソートを作ろうと思うのですが作り方がわかりません>< 色々な検索エンジンで調べたのですが 作る方法が乗っているのが見つかりませんでした! どなたか作り方を教えてくださると嬉しいです。 こんな感じのが作ってみたいです↓ http://korason.o-oku.jp/dsort.html ソート cygwinのCシェルで、ファイルの内容をソートしたいです。 数字だけだとsort -n でソートされるのですが、頭にアルファベットがある場合に ソートする方法はあるでしょうか? 下記のようになってしまうのですが、頭にアルファベットがあっても後ろの数字でソートしたいです。 L1 L10 L101 L102 L2 L20 L201 L3 L30 L301 L401 スプレッドでのソート スプレッドでソートを行いたく、列と行の設定でヘッダの動作を『ソート』にしたのですが、以下の問題が生じました。 件数 1 2 3 10 15 20 ↓ ソートすると 1 10 15 2 20 3 セル型を『数値』に設定しても同じ結果になります。 きちんと1,2,3,10,15,20と昇順にソートさせるにはどうすればよいでしょうか。 ご教授願います。 ソート(データの並べ替え)の逆概念はシャッフル? ソートは、データの集合を一定の規則に従って並べること。 バブルソート、シェーカーソート、コムソート、選択ソート、 挿入ソート、シェルソート、ヒープソート、マージソート、 クイックソート、バケットソート、基数ソート、 逆写像ソート、ボゴソート、奇偶転置ソート、シェアソート などがあるそうです。 ではその逆概念の、データの集合を一定の規則に従ってバラバラにすることってなんといいますか? トランプ(カードマジック)でよく見かけるシャッフルのことでしょうか? ディールシャッフル、ヒンズーシャッフル、オーバーハンドシャッフル、リフルシャッフル、ファローシャッフル などがあるそうです。 それらを数学的に扱ったものってありますか? エクセルのソートができなくなった もとのデータではソートは自由自在にできていました。 しかしその下に新しいデータを入力したら、ソートはまったくできなくなり 元の並び順にもどらなくなって困っています。 データを付け加えるとできなくなるものなのでしょうか? それと、だいたいソートできても2つくらいのデータは指定したソートにならない時があります。 例)50音順なのにナ行の中に「シ」が含まれる など ほかのデータとの違いはないと思うのですが… javaのソートについて。 うまく文章で伝えられないかもしれませんがお願いします。 csvファイルの中に 名前、住所、電話番号、アドレス と入った一文が複数あるとします。 これを名前の50音順に並べたいのですが、 文字でもArrays.sortでソートは可能でしょうか? 一応やってみたのですがうまくいきませんでした。 さらに質問なんですが私はこのcsvファイルの一文を削除したり、変更したりというプログラムを作っています。 変更や削除の場合は一度配列に全ての文を入れてその後削除、変更を行った後に またファイルに書き込むという形をとっています。 この場合50音順に並べるには一度書き込みが終った後もう一度読み込んでソートをして 書き込みなおすしか方法はないのでしょうか? ご教授お願いします。 wordで作成した名簿を五十音順にソートすることは可能でしょうか?よろ wordで作成した名簿を五十音順にソートすることは可能でしょうか?よろしくお願いします。 社員IDのソート 社員IDの桁が混在しています。 社員IDでorder byすると 0001 0011 100 1200 123 1234 321 となります。これを 100 123 321 0001 0011 1200 1234 と桁数別にソートしたいと考えています。 ちなみにVARCHARです。 order by 以下うまくソートする方法が知りたいです。 お願いします。 AIは使う人の年齢や市場にも影響する?人工知能の可能性 OKWAVE コラム 二つの配列をソートする (50,14) (20,15) (16.7,16) (0,17) (-1,18) (5,21) (33.3,22) (51,25) (52,26) (51,28) (51,27) を (52,26) (51,25) (51,27) (51,28) (50,14) (33.3,22) (20,15) (16.7,16) (5,21) (0,17) (-1, 18) のようにソートしたいのですが、有効なソートの方法がありましたら教えてください。左側の数字を配列A、右側を配列Bに入れてソートしたいです。 条件付ソートについて SQL文で条件付のソートについて教えてください。 テーブルA(id, data_a, data_b)があったとき、 data_aとdata_bのうち、値が大きいほうのデータでソートするためのSQL文が知りたいのです。 例えば以下のようなデータが入っていたとき、 id,date_a,date_b 1, 10, 0 2, 20, 40 3, 30, 30 4, 90, 15 以下のような結果になるようにソートしたいのです。 id,date_a,date_b 1, 10, 0 3, 30, 30 2, 20, 40 4, 90, 15 良い方法があれば教えてください。 よろしくお願いします。 ふたつの並べ替えを同じように行うには たとえば、 $out[0] = "いぬ"; $out[1] = "もりくぼしょうたろう"; $out[2] = "うさぎさん"; $out[3] = "からす"; $out[4] = "ねこ"; という @out を用意して以下のようにすると、 my @sorted = sort { length($b) <=> length($a) } @out; 長さでソートが行われます。おそらく長い順に並び替えが行われるので $sorted[0] = "もりくぼしょうたろう"; $sorted[1] = "うさぎさん"; $sorted[2] = "からす"; $sorted[3] = "いぬ"; $sorted[4] = "ねこ"; となると思います。 ここからが質問なのですが、 @out の他にもうひとつ @out と同じ数の変数を用意して、 $out_hitokoto[0] = "わんわん"; $out_hitokoto[1] = "いくぜ!相棒!"; $out_hitokoto[2] = "ぴょんぴょん"; $out_hitokoto[3] = "カァーカァー"; $out_hitokoto[4] = "にゃにゃーん"; @out_hitokoto は @out と対応しています。しかし、@outをソートすれば、 対応している@out_hitokotoも並べ替えを行わなければなりません。 ハッシュ変数はある事情から使えません。 なにかよい方法はないでしょうか? できれば、 my @sorted = sort { length($b) <=> length($a) } @out; の次の文章で@out_hitokotoに変化を起こさせたいのですが。 みなさんは、どうしますか? ソートについて 以下のデータを先頭の8,45で降順ソートにしたいのですが、どうすればよいのでしょうか? use strict; my @DAT=(); push @DAT, [8, 1, undef]; push @DAT, [45, 2, undef]; また、次の場合も降順ソートさせたいです。 push @DAT, {'ten'=>8, 'cd'=>1, 'memo'=>undef}; push @DAT, {'ten'=>45, 'cd'=>2, 'memo'=>undef}; 配列のソートがしたい sort関数等調べたのですがうまくできません。 やりたいことは http://q.hatena.ne.jp/1155090363 ↑で見つけた事とそっくりなのですが・・・。 ------------------------------------------- arrItem[n] という配列の一つの要素の中に、 タブで区切られた10個程のデータが入っています。 arrItem[0] = "5 ^ 店名5 ^ 品名5 ^ 価格5 ^ 割引額5 ^・・・^ 備考5" arrItem[1] = "2 ^ 店名2 ^ 品名2 ^ 価格2 ^ 割引額2 ^・・・^ 備考2" arrItem[2] = "11 ^ 店名9 ^ 品名9 ^ 価格9 ^ 割引額9 ^・・・^ 備考9" 一列目はSEQ番号でユニークですが、順番が並んでいません。 この配列をSEQ番号で並べ替えたいのですが、 sortだと文字列比較のためか桁数の違う数字の並べ替えが 上手くできません。数値としてのソート方法 が分かる方いらっしゃいましたらご教授願います。 もし可能なら、1列目を数値降順にしたり昇順にしたり、 また2列目を五十音順にソートしたり、 また4列目を価格の安い順にソートしたり と応用も可能ならばご教授願いたいです。 宜しくお願い致します。 ソートで get().sort(function() { return Math.round(Math.random()) - 0.5; }) はどういう意味ですか? ソートを return Math.round(Math.random()) - 0.5; でするようですが、 ランダムな数字を出してどうやってソートされるのですか? ソートは文字でか数値ででないのですか? http://memopad.bitter.jp/w3c/jsref/jsref_sort.html では >フォルトで、要素をアルファベットの昇順にソートします。 しかし、数値が正しくソートされません(40が5の前に来ます)。 数値をソートするためには、数を比較する関数を追加しなければなりません。 となっています。 ランダムな数字でソートはできるのですか? 使う意味を教えて下さい。 それから、-0.5をしてるのはどういう意味でしょうか? IPアドレスのSORTについて EXCELの並べ替え(ソート)で、例えば以下のIPアドレスを 昇順にした場合、結果は(1)(2)にはなりません。 (1)(2)にする方法は無いでしょうか。 (1)10.6.90.xxx (2)10.10.60.xxx ソート方法 1から80までの数値がありこれをソートする場合、短いソースでソートする場合と実行効率が良い方法で互いにどういう方法がいいでしょう? ・初期状態で大まかにはソートされています。 (10,11,12,・・・,19,1,20,21,・・・,29,2,・・・,79,80,8,9)といった感じです。 ・数値は現段階では配列には入っていません。ファイルから読み込んでいるのでString型になっています。 アドバイスください。宜しく御願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
ありがとうございました。 参考http://search.cpan.org/src/SADAHIRO/Lingua-JA-Sort-JIS-0.05/JIS.pm #awk版 function aiu(moji1){ out1=moji1; sub(/[あぁアァアァ]/ ,"あ",out1); sub(/[かがカガヵカガ]/ ,"か",out1); sub(/[さざサザサザ]/ ,"さ",out1); sub(/[ただタダタダ]/ ,"た",out1); sub(/[なナナ]/ ,"な",out1); sub(/[はばぱハバパハバパ]/ ,"は",out1); sub(/[まママ]/ ,"ま",out1); sub(/[やゃヤャヤャ]/ ,"や",out1); sub(/[らララ]/ ,"ら",out1); sub(/[わゎワヮワ]/ ,"わ",out1); sub(/[いぃイィイィ]/ ,"い",out1); sub(/[きぎキギキギ]/ ,"き",out1); sub(/[しじシジシジ]/ ,"し",out1); sub(/[ちぢチヂチヂ]/ ,"ち",out1); sub(/[にニニ]/ ,"に",out1); sub(/[ひびぴヒビピヒビピ]/ ,"ひ",out1); sub(/[みミミ]/ ,"み",out1); sub(/[りリリ]/ ,"り",out1); sub(/[ゐヰ]/ ,"ゐ",out1); sub(/[うぅウヴゥウヴゥ]/ ,"う",out1); sub(/[くぐクグクグ]/ ,"く",out1); sub(/[すずスズスズ]/ ,"す",out1); sub(/[つづっツヅッツヅッ]/ ,"つ",out1); sub(/[ぬヌヌ]/ ,"ぬ",out1); sub(/[ふぶぷフブプフブプ]/ ,"ふ",out1); sub(/[むムム]/ ,"む",out1); sub(/[ゆゅユュユュ]/ ,"ゆ",out1); sub(/[るルル]/ ,"る",out1); sub(/[えぇエェエェ]/ ,"え",out1); sub(/[けげケゲヶケゲ]/ ,"け",out1); sub(/[せぜセゼセゼ]/ ,"せ",out1); sub(/[てでテデテデ]/ ,"て",out1); sub(/[ねネネ]/ ,"ね",out1); sub(/[へべぺヘベペヘベペ]/ ,"へ",out1); sub(/[めメメ]/ ,"め",out1); sub(/[れレレ]/ ,"れ",out1); sub(/[ゑヱ]/ ,"ゑ",out1); sub(/[おぉオォオォ]/ ,"お",out1); sub(/[こごコゴコゴ]/ ,"こ",out1); sub(/[そぞソゾソゾ]/ ,"そ",out1); sub(/[とどトドトド]/ ,"と",out1); sub(/[のノノ]/ ,"の",out1); sub(/[ほぼぽホボポホボポ]/ ,"ほ",out1); sub(/[もモモ]/ ,"も",out1); sub(/[よょヨョヨョ]/ ,"よ",out1); sub(/[ろロロ]/ ,"ろ",out1); sub(/[をヲヲ]/ ,"を",out1); sub(/[んンン]/ ,"ん",out1); return out1}