PDA

Просмотр полной версии : Сортировка по украинскому алфавиту


Serg L
11.11.2009, 01:47
Вот столкнулся с такой проблемой. Выбираю из БД список фамилий на украинском языке и фамилии начинающиеся на буквы отсутствующие в русском (і, є, ї) становятся в начале списка (перед а). При чем порядок нарушен как при выборе из БД с помощью ПХП, так и при сортировке в DataGrid.
Может кто знает как решить проблему или хотя бы в каком направлении копать.

BeDLiNt
16.11.2009, 10:22
Напиши свою функцию сортировки для column с фамилией.
sortCompareFunction

Serg L
16.11.2009, 23:36
Спасибо за подсказку. Изучу пример, если получится результат выложу, думаю еще кому-нибудь пригодится.

Добавлено через 1 час 21 минуту
Я в программировании новичек. Не подскажете где можно подсмотреть пример алгоритма сортировки по алфавиту?

wvxvw
17.11.2009, 02:34
В качестве примера:
const LOWER:String = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя";
const UPPER:String = "АБВГҐДЕЄЖЗИIЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";

function sortUkr(a:String, b:String):int
{
var i:int = Math.min(a.length, b.length);
var j:int;
var ai:int;
var bi:int;
var ca:String;
var cb:String;
var isUpper:Boolean;
while (j < i)
{
ca = a.charAt(j);
cb = b.charAt(j);
ai = Math.max(LOWER.indexOf(ca), UPPER.indexOf(ca));
bi = Math.max(LOWER.indexOf(cb), UPPER.indexOf(cb));
if (ai < bi) return -1;
else if (ai > bi) return 1;
j++;
}
if (a.length < b.length) return -1;
else if (a.length > b.length) return 1;
return 0;
}

var arr:Array = [];
var i:int = 10;
var j:int;
var s:String;
while (i--)
{
j = 1 + Math.random() * 10;
s = "";
while (j--)
{
if (Math.random() > 0.49)
{
s += LOWER.charAt((Math.random() * LOWER.length) >> 0);
}
else
{
s += UPPER.charAt((Math.random() * UPPER.length) >> 0);
}
}
arr.push(s);
}

trace(arr.join("\r"));
trace("-------------------");
arr = arr.sort(sortUkr);
trace(arr.join("\r"));
Ну только латинские символы или знаки препинания и цифры нужно будет тоже отдельно обработать.