これつぐです。
fj.comp.lang.perl で日本語(ひらがな・カタカナ)の
辞書順ソートの話が出ていたのを見て、
意外と需要があるのかもしれない、
と思ったので昔書いたものを公開します。
「一応使える」程度ですが……。
(日本語の配列).jsort でソートします。
--------------------------------------------------
require "jcode"
class Array
def vowel(c)
case c
when /[あかさたなはまやらわ]/; 'あ'
when /[いきしちにひみゐり]/; 'い'
when /[うくすつぬふむゆる]/; 'う'
when /[えけせてねへめゑれ]/; 'え'
when /[おこそとのほもよろを]/; 'お'
else; 'ー'
end
end
def jlex(str)
str.tr(<<FM.chop, <<TO.chop).gsub(/(.)ー/){$1 + vowel($1)}
ァアィイゥウェエォオカガキギクグケゲコゴ\
サザシジスズセゼソゾタダチヂッツヅテデトド\
ナニヌネノハバパヒビピフブプヘベペホボポ\
マミムメモャヤュユョヨラリルレロヮワヰヱヲンヴ\
ぁぃぅぇぉがぎぐげござじずぜぞだぢっづでど\
ばぱびぴぶぷべぺぼぽゃゅょゎゐゑ
FM
ああいいううええおおかかききくくけけここ\
ささししすすせせそそたたちちつつつててとと\
なにぬねのはははひひひふふふへへへほほほ\
まみむめもややゆゆよよらりるれろわわいえをんう\
あいうえおかきくけこさしすせそたちつつてと\
ははひひふふへへほほやゆよわいえ
TO
end
private :vowel, :jlex
def jsort!
filter{|e| [jlex(e), e]}.sort!.filter{|e| e.pop}
end
def jsort
dup.jsort!
end
end