swift - تحميل - كيفية فرز مجموعة في سويفت




تحميل swift (6)

أريد إصدار Swift من هذا الرمز:

NSArray *sortedNames = [names sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

الطريقة الأكثر فعالية للفرز في سويفت

استخدام Overloading للمشغل هو الطريقة الأكثر فاعلية لفرز الأوتار بلغة Swift.

// OPERATOR OVERLOADING
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortedNames = sorted(names, <)
var reverseOrder = sorted(names, >)

في التعليمة البرمجية أعلاه > و < يتم تحميل عوامل التشغيل في Swift لفرز السلاسل.

لقد اختبرت الشفرة في Playground واستنتجت أنه عندما نستخدم التحميل الزائد للمشغل ، فمن الأفضل لفرز الأوتار.

نسخ أدناه إلى الملعب.

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

var reversed = sorted (names,
    // This is a closure
    { (s1 : String, s2 : String) -> Bool in
        return s1 > s2
    }
)
println(reversed)

var reverseOrder = sorted(names, {s1, s2 in s1 > s2})

var reverseOrder2 = sorted(names, { $0 > $1} )

// OPERATOR OVERLOADING
var reverseOrder3 = sorted(names, >)

الاستنتاج من الملعب:

من الصورة أعلاه يمكنك أن ترى أن جميع الطرق الأخرى تحتاج إلى تعداد الحلقات لفرز 5 سلاسل. عندما نستخدم مشغل التحميل الزائد فإنه لا يلزم تعداد حلقة لفرز الأوتار.

المشار إليها من وثائق سويفت


فرز صفيف في سويفت

تحديد مجموعة الأسماء الأولية:

var names = [ "gamma", "Alpha", "alpha", "bravo"]

طريقة 1:

var sortedNames = sorted(names, {$0 < $1})
// sortedNames becomes "[Alpha, alpha, bravo, gamma]"

يمكن تبسيط ذلك إلى:

var sortedNames = sorted(names, <)
// ["Alpha", "alpha", "bravo", "gamma"]
var reverseSorted = sorted(names, >)
// ["gamma", "bravo", "alpha", "Alpha"]

الطريقة 2:

names.sort(){$0 < $1}
// names become sorted as this --> "[Alpha, alpha, bravo, gamma]"

إذا كان الصفيف الخاص بك لا يحتوي على كائنات مخصصة (مجرد سلسلة أو نوع رقم):

var sortedNames = sorted(names, <)

وإلا إذا قمت بإنشاء فئة كائنات بيانات مخصصة تحتوي على خصائص مخصصة بداخل:

customDataObjectArray.sort({ $0.customProperty < $1.customProperty })

إذا كنت ترغب في فرز صفيفك بترتيب تصاعدي ، فاستخدم بناء الجملة أدناه:

var arrayName = sorted(arrayName, <)

حيث أن الفرز () هي الوظيفة المحددة مسبقًا بسرعة ، ويتم استخدام <للإشارة إلى أنه يجب فرز المصفوفة بترتيب تصاعدي. إذا كنت ترغب في فرز المصفوفة بترتيب تنازلي ، فاستبدل < ب > كما أظهرت أدناه:

var arrayName = sorted(arrayName, >)

في سويفت

let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted()
print(sortedStudents)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"

لفرز عناصر التسلسل بترتيب تنازلي ، مرر العامل أكبر من (>) إلى الأسلوب (isOrderedBefore :).

let descendingStudents = students.sorted(isOrderedBefore: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }

تحديث: تقديم تفسير بناءً على توصية مستخدم SO.

على عكس ObjC ، في Swift لديك طريقة الفرز () (و sort ()) تأخذ إغلاقًا تقوم بإدخاله ويعيد قيمة منطقية للإشارة إلى ما إذا كان يجب أن يكون أحد العناصر قبل (صواب) أو بعد (false) عنصرًا آخر. 0 دولار و 1 دولار هي العناصر للمقارنة. لقد استخدمت localizedCaseInsensitiveCompare للحصول على النتيجة التي تبحث عنها. الآن ، ترجع localizedCaseInsensitiveCompare نوع الطلب ، لذلك كنت بحاجة إلى تعديله لإرجاع قيمة منطقية مناسبة.

تحديث لـ Swift 2: تم sorted sort sort و sortInPlace





swift