Ответ 1
Сортировка - просто причудливое слово для сортировки (ну вроде). Таким образом, это упорядочение сортировки на основе локализованных предпочтений (то есть текущего алфавита и условностей языка) в конце asc.
private Cursor getContacts()
{
// Run query
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
(mShowInvisible ? "0" : "1") + "'";
String[] selectionArgs = null;
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
}
Что означает COLLATE LOCALIZED ASC
?
Сортировка - просто причудливое слово для сортировки (ну вроде). Таким образом, это упорядочение сортировки на основе локализованных предпочтений (то есть текущего алфавита и условностей языка) в конце asc.
Он инструктирует SQLite соответствующим образом сортировать символы, отличные от ASCII. Шрифты с диакритикой (некоторые называют их акцентами) имеют более высокие байтовые коды, чем символ Z, поэтому простая форма ASCII не подходит для многих иностранных языков.
Например, байтовый код капитала char составляет 0x41
, а капитал Z char равен 0x5A
. Тогда мы имеем Á (капитал A accute), код которого в Unicode равен 0x00C1
. Таким образом, простая сортировка байтового кода приведет к тому, что Á будет после Z.
Но на языках, у которых есть такие символы, конвенция состоит в том, чтобы поместить их с диакритикой, как если бы у них не было диакритики. Таким образом, Á должен быть вместе с равниной A, по крайней мере до B.
И чтобы проиллюстрировать, мы имеем ниже список имен, отсортированных с использованием их байт-кода:
Теперь, используя COLLATE LOCALIZED
, он сортирует по "базе" символа:
COLLATE - это оператор SQL, который позволяет вам переопределить порядок сортировки по умолчанию для строк. Например, "COLLATE NOCASE" делает сравнение без учета регистра, а "COLLATE BINARY" делает сравнение с учетом регистра.
Интерфейс SQLite C позволяет определять пользовательские сопоставления (http://www.sqlite.org/c3ref/create_collation.html).