0Pricing
Scala for Backend Engineering & Functional Programming · درس

List وVector وSet وMap

المجموعات الأساسية

List وVector وSet وMap درس مجاني في Scala for Backend Engineering & Functional Programming على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Scala for Backend Engineering & Functional Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

مجموعات Scala الأساسية

توفّر Scala عدة مجموعات غير قابلة للتغيير في مكتبتها القياسية. والمجموعات الأربع التي ستستخدمونها غالبًا هي List وVector وSet وMap. ولكل منها أداء ودلالات مختلفة.

object Main {
  def main(args: Array[String]): Unit = {
    val list = List(1, 2, 3)
    val vector = Vector(1, 2, 3)
    val set = Set(1, 2, 3)
    val map = Map("a" -> 1, "b" -> 2)
    println(list)
    println(vector)
    println(set)
    println(map)
  }
}

List: قائمة مترابطة

‏List هي قائمة مترابطة أحادية الاتجاه. وتُعد الإضافة في المقدمة باستخدام :: عملية O(1) وسريعة، لكن الوصول العشوائي والإضافة في النهاية عمليتان من O(n). وهي مثالية للتكرار والاستخدام الشبيه بالمكدس.

object Main {
  def main(args: Array[String]): Unit = {
    val xs = List(2, 3, 4)
    val prepended = 1 :: xs
    println(prepended)
    println("head: " + xs.head)
    println("tail: " + xs.tail)
  }
}

Vector: متوازنة وعامة الاستخدام

‏Vector تسلسل مفهرس، ويكون الوصول والتحديث والإضافة في المقدمة والنهاية فيه فعليًا بتعقيد O(1). وعندما تحتاجون إلى وصول عشوائي سريع أو تسلسل عام الاستخدام، ففضّلوا Vector على List.

object Main {
  def main(args: Array[String]): Unit = {
    val v = Vector(10, 20, 30, 40)
    println(v(2))
    val updated = v.updated(0, 99)
    println(updated)
    println(v :+ 50)
  }
}

Set: عناصر فريدة

تخزّن Set عناصر متميزة بلا تكرارات ومن دون ترتيب مضمون. وتكون اختبارات العضوية باستخدام contains سريعة.

object Main {
  def main(args: Array[String]): Unit = {
    val s = Set(1, 2, 2, 3, 3, 3)
    println(s)
    println(s.contains(2))
    println(s + 4)
    println(s - 1)
  }
}

عمليات Set

تدعم المجموعات عمليات رياضية: union (|) وintersect (&) وdiff (−−).

object Main {
  def main(args: Array[String]): Unit = {
    val a = Set(1, 2, 3)
    val b = Set(2, 3, 4)
    println(a union b)
    println(a intersect b)
    println(a diff b)
  }
}

Map: أزواج مفتاح-قيمة

تربط Map المفاتيح بالقيم. والمفاتيح فريدة. أنشئوا الإدخالات باستخدام سهم ->، وابحثوا عن القيم باستخدام get (الذي يعيد Option) أو apply.

object Main {
  def main(args: Array[String]): Unit = {
    val ages = Map("Ann" -> 30, "Bob" -> 25)
    println(ages("Ann"))
    println(ages.get("Cara"))
    println(ages.getOrElse("Cara", 0))
  }
}

تحديث Map بصورة غير قابلة للتغيير

تعيد الخرائط غير القابلة للتغيير خريطة جديدة عند إضافة الإدخالات أو إزالتها؛ ولا تتغير الخريطة الأصلية. استخدموا + للإضافة أو الاستبدال، و- للإزالة.

object Main {
  def main(args: Array[String]): Unit = {
    val m = Map("a" -> 1)
    val m2 = m + ("b" -> 2)
    val m3 = m2 - "a"
    println(m)
    println(m2)
    println(m3)
  }
}

التكرار على Map

يمنحكم التكرار على Map tuples من المفاتيح والقيم. ويمكنكم تفكيكها مباشرةً في تعبير for-comprehension أو باستخدام مطابقة الأنماط.

object Main {
  def main(args: Array[String]): Unit = {
    val scores = Map("math" -> 90, "art" -> 75)
    for ((subject, score) <- scores) {
      println(s"$subject: $score")
    }
  }
}

دوال شائعة تشترك فيها جميع المجموعات

تشترك كل هذه المجموعات في واجهة برمجية مشتركة واسعة، مثل size وisEmpty وmap وfilter وforeach وغيرها. تعلّموا الواجهة مرة واحدة، وستنطبق في كل مكان.

object Main {
  def main(args: Array[String]): Unit = {
    println(List(1, 2, 3).map(_ * 2))
    println(Vector(1, 2, 3).map(_ * 2))
    println(Set(1, 2, 3).map(_ * 2))
  }
}

التحويل بين المجموعات

تتيح لكم دوال التحويل مثل toList وtoVector وtoSet وtoMap تبديل الأنواع بسهولة. ويؤدي التحويل إلى Set إلى إزالة التكرارات.

object Main {
  def main(args: Array[String]): Unit = {
    val withDupes = List(1, 1, 2, 3, 3)
    println(withDupes.toSet)
    val pairs = List(("a", 1), ("b", 2))
    println(pairs.toMap)
  }
}

اختيار المجموعة المناسبة

دليل سريع:

  • List — التكرار، والإضافة السريعة في المقدمة، ومعالجة الرأس والذيل
  • Vector — للاستخدام العام، والوصول المفهرس السريع
  • Set — التفرد واختبارات العضوية
  • Map — البحث القائم على المفاتيح
object Main {
  def main(args: Array[String]): Unit = {
    val ids = List(5, 3, 5, 1, 3)
    val unique = ids.toSet
    val indexed = ids.toVector
    println(s"unique count: ${unique.size}")
    println(s"third element: ${indexed(2)}")
  }
}

تحقق سريع

أي مجموعة تزيل العناصر المكررة تلقائيًا؟

مراجعة

تعرّفتم إلى مجموعات Scala الأساسية غير القابلة للتغيير:

  • List — قائمة مترابطة، وإضافة سريعة في المقدمة
  • Vector — أداء مفهرس ومتوازن جيدًا
  • Set — عناصر فريدة مع جبر المجموعات
  • Map — البحث عن المفاتيح والقيم باستخدام get/getOrElse

تشترك هذه المجموعات في واجهة برمجية غنية، ويمكن تحويلها إلى بعضها بسهولة.

الأسئلة الشائعة

هل درس «List وVector وSet وMap» مجاني؟

نعم — نص درس «List وVector وSet وMap» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Scala for Backend Engineering & Functional Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Scala for Backend Engineering & Functional Programming 4 دروس في المجموع.

ماذا ستتعلم في «List وVector وSet وMap»؟

المجموعات الأساسية تتمرن على Scala for Backend Engineering & Functional Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Scala for Backend Engineering & Functional Programming؟

لا تُشترط خبرة سابقة. Scala for Backend Engineering & Functional Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «List وVector وSet وMap»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Scala for Backend Engineering & Functional Programming هذا؟

نعم. كل درس في Scala for Backend Engineering & Functional Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. List وVector وSet وMap
  2. التحويلات
  3. الطي والاختزال
  4. التجميع والترتيب
← العودة إلى Scala for Backend Engineering & Functional Programming