辞書の言葉の並び順はアイウエオ順ですが、「ー」という伸ばす音、長音があるときは、その前の音によって判断されます。
その前の音がア段ならば「ア」、イ段ならば「イ」となります。
例えば「ワード」ならば「ワアド」、「キー」ならば「キイ」として並び順が決まります。
ワア≫ワー≫ワアド≫ワード≫ワイ
となります。
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);
}
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);
}
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);
}
コメント