• ベストアンサー

sort関数でひらがなとカタカナを一緒に並べるには

("いちご","リンゴ","サクランボ","みかん") が入ったリストを、「sort」関数で並び替えすると いちご、みかん、サクランボ、リンゴ このように前半にひらがな、後半にカタカナで処理されます。それを、 いちご、サクランボ、みかん、リンゴ このようにひらがなとカタカナを混ぜて五十音順にしたいのですが、 どうすればいいのでしょうか よろしくお願いします

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

#こんな感じでどうでしょう use encoding 'shiftjis'; @data=("いちご","リンゴ","サクランボ","みかん"); foreach $x (@data){ $data{$x}=&toKana($x); } @data=sort { $data{$a} cmp $data{$b} } keys %data; sub toKana($){ my $str = shift; $str =~ tr/ぁ-ん/ァ-ン/; return $str; }

is_may
質問者

お礼

解決しました ありがとうございました!

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

その他の回答 (1)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.2

ひらがな、かたかな、どちらかに変換した文字を先頭においてからソートしては? ShiftJISであればですが、以下のように。 #!Perl use ShiftJIS::String; @kana_list = ('いちご', 'みかん', 'サクランボ', 'リンゴ'); print "1st state:\n", join("\n", @kana_list), "\n\n"; for (@kana_list) { my $tmp = $_; ShiftJIS::String::strtr(\$tmp, 'ぁ-ん', 'ァ-ン', 'o'); $_ = $tmp . "\t" . $_; } print "2nd state:\n", join("\n", @kana_list), "\n\n"; @kana_list = sort @kana_list; print "3nd state:\n", join("\n", @kana_list), "\n\n"; $_ = (split(/\t/, $_))[1] for @kana_list; print "4th state:\n", join("\n", @kana_list), "\n\n"; __END__ D:\@ai\@Perl\app>KANA_SORT.pl 1st state: いちご みかん サクランボ リンゴ 2nd state: イチゴ いちご ミカン みかん サクランボ サクランボ リンゴ リンゴ 3nd state: イチゴ いちご サクランボ サクランボ ミカン みかん リンゴ リンゴ 4th state: いちご サクランボ みかん リンゴ D:\@ai\@Perl\app>

is_may
質問者

お礼

難しいですね^^; ありがとうございましたm(_ _)m

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

関連するQ&A