これつぐです。


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