Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دمج المقارنات

جزء من قسم المنطق وتدفق التنفيذ في رحلة Kotlin على Coddy. الدرس 37 من 63.

استخدم sortedWith لتوفير مقارن. يقارن compareBy<String> { it.length } أطوال الكلمات؛ وتُجري السلسلة .thenBy { it } مقارنةً بالكلمة نفسها عندما تتساوى الأطوال. لا تُستخدم مفاتيح المقارنة اللاحقة إلا عندما تتساوى جميع المفاتيح السابقة.

داخل main:

val order = compareBy<String> { it.length }.thenBy { it }
println(listOf("bb", "a", "aa").sortedWith(order))

يضع الطول الحرف a أولًا؛ وتكسر المقارنة الأبجدية التعادل بين العنصرين ذوي الحرفين.

يعمل thenBy على كسر حالات التعادل دون استبدال مفتاح المقارنة السابق.

challenge icon

التحدي

متوسط

أكمل wordOrder باستخدام المعاملات words: List<String>. رتّب الكلمات ذات الأحرف الصغيرة بنظام ASCII حسب الطول تصاعديًا، ثم أبجديًا عند التساوي.

ما لم تُذكر حدود أكثر صرامة أعلاه، تحتوي المجموعات على 100 عنصر كحد أقصى في كل مستوى، وتكون المعاملات الصحيحة وقيم المجموعات الصحيحة بين -1000 و1000. يمكن أن يحتوي النص المُقدَّم للتحليل على تمثيلات غير صالحة أو خارج النطاق كما هو موضح.

أعد قيمة من النوع List<String>. أبقِ تعليمات الإدخال/الإخراج المُقدَّمة كما هي. فهي تقرأ المعاملات المفردة، واحدًا في كل سطر؛ تبدأ القائمة بعدد عناصرها متبوعًا بعناصرها، وتبدأ الخريطة بعدد إدخالاتها متبوعًا بكل مفتاح وقيمة. تكرر القوائم المتداخلة تنسيق العدد والعناصر لكل صف. تطبع main المُقدَّمة القيمة المُعادة متبوعة بسطر جديد واحد. تستخدم القوائم التنسيق القياسي المُحاط بأقواس مربعة في Kotlin؛ لا تطبع أي تسميات إضافية.

جرّب بنفسك

fun wordOrder(words: List<String>): List<String> {
    // اكتب حلك هنا.
    return emptyList()
}
fun main() {
    val wordsCount = readln().toInt()
    val words = mutableListOf<String>()
    for (i0 in 0 until wordsCount) {
        val wordsItem = readLine().orEmpty()
        words.add(wordsItem)
    }
    println(wordOrder(words))
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: Playground لـ Kotlin