長音を含む文字列を辞書順でソート

Pocket

辞書の言葉の並び順はアイウエオ順ですが、「ー」という伸ばす音、長音があるときは、その前の音によって判断されます。
その前の音がア段ならば「ア」、イ段ならば「イ」となります。
例えば「ワード」ならば「ワアド」、「キー」ならば「キイ」として並び順が決まります。

ワア≫ワー≫ワアド≫ワード≫ワイ

となります。

Excel(2007)では、辞書と同様にソートされます。
しかし、OpenOfficeのCalcでは、辞書順でなくコード順でソートされます。
また、JavaScriptのsortでも、コード順でソートされます。
つまり「ー」はコード順では「ン」より後ですから

ワア≫ワイ≫ワン≫ワー

のようになってしまいます。

これを辞書順でソートするためには、まず長音を「アイウエオ」に変換してからソートする必要があります。
JavaScriptのコードを書いてみました。

まずソートの部分。配列を渡すと長音を「アイウエオ」に変換して昇順でソートして返します。

function aiueo_sort(words) {
    words.sort(function (a, b) {
        if (a == b) {
            return (0);
        }
        var ca = choon_conv(a);
        var cb = choon_conv(b);
        if (ca == cb) {
            ca = a;
            cb = b;
        }
        if (ca > cb) {
            return (1);
        } else {
            return (-1);
        }
    });
    return (words);
}

次は長音を「アイウエオ」に変換する関数です。

function choon_conv(word) {
    var a = word.substr(0, 1);
    for (var i = 1; i < word.length; i++) {
        var t = word.substr(i, 1);
        if (t == "ー") {
            mae = word.substr(i - 1, 1);
            if (mae.match(/[アカサタナハマヤラワ]/)) {
                t = "ア";
            } else if (mae.match(/[イキシチニヒミリ]/)) {
                t = "イ";
            } else if (mae.match(/[ウクスツヌフムユル]/)) {
                t = "ウ";
            } else if (mae.match(/[エケセテネヘメレ]/)) {
                t = "エ";
            } else if (mae.match(/[オコソトノホモヨロ]/)) {
                t = "オ"
            }
        }
        a += t;
    }
    return (a);
}

[ 2011年5月7日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報