سؤال

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 الوقوف؟

هل كانت مفيدة؟

المحلول

Collate هو مجرد خيال يتحدث عن النوع (جيدا من). لذلك هذا هو ترتيب منفردة بناءً على التفضيلات الموضعية (أي الأبجدية والاتفاقيات للغة الحالية) في ASCأمر النهاية.

نصائح أخرى

يرشد SQLite إلى فرز الشخصيات غير ASCII بشكل مناسب. لدى chars مع علم الحمل (بعضها يسمونها لهجات) رموز بايت أعلى من الحرف Z ، لذلك لن يتناسب نوع ASCII العادي للعديد من اللغات الأجنبية.

على سبيل المثال ، رمز بايت رأس المال هو 0x41 و Capital Z char's 0x5A. ثم لدينا á (رأس المال A) أي رمز في Unicode 0x00C1. لذا فإن نوع رمز البايت العادي سيؤدي إلى أن يكون بعد Z.

ولكن في اللغات التي لديها هذا النوع من الشخصيات ، فإن الاتفاقية هي وضع أولئك الذين يعانون من العلماء كما لو لم يكن لديهم الرحلات. لذلك يجب أن يكون á مع السهل A ، على الأقل قبل B.

ولتوضيح ، لدينا أدناه قائمة بالأسماء المصنفة باستخدام رمز Bytecode الخاص بهم:

  • بريندا
  • ديبي
  • جورج
  • álvaro
  • érico

الآن باستخدام COLLATE LOCALIZED سوف فرز حسب "قاعدة" الشخصية:

  • álvaro
  • بريندا
  • ديبي
  • érico
  • جورج

Collate هو مشغل SQL يتيح لك تجاوز ترتيب الفرز الافتراضي للسلاسل. على سبيل المثال ، فإن "collate nocase" تقوم بالتقارن غير الحساسة للحالة ، و "Collate Binary" تقوم بمقارنة حساسة للحالة.

تتيح لك واجهة SQLite C تحديد المجموعات المخصصة (http://www.sqlite.org/c3ref/create_collation.html).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top