English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala List(قائمة Scala)

المجموعات لScala

قائمة Scala تشبه المصفوفات، حيث تكون جميع العناصر لها نفس النوع، ولكنها تختلف أيضًا: القائمة غير قابل للتغيير، حيث لا يمكن تغيير القيمة بعد تعريفها، والقائمة تحتوي على بنية مرجعية (مثل بنية قائمة الاتصال) وليس المصفوفة.

نوع العناصر T في القائمة يمكن كتابته كـ List[T]. على سبيل المثال، يُمكن عرض أنواع مختلفة من القوائم كما يلي:

// قائمة من النصوص
val site: قائمة[نص] = قائمة("w3codebox", "Google", "Baidu")
// قائمة من الأعداد الصحيحة
val nums: قائمة[عدد] = قائمة(1, 2, 3, 4)
// قائمة فارغة
val empty: قائمة[لاشيء] = قائمة()
// قائمة مرتبعة
val dim: قائمة[قائمة[عدد]] =
   قائمة(
      قائمة(1, 0, 0),
      قائمة(0, 1, 0),
      قائمة(0, 0, 1)
   )

الوحدتين الأساسيتين لإنشاء القائمة هما Nil و ::

Nil يمكن أيضًا تمثيلها كقائمة فارغة.

يمكن كتابة المثال السابق كما يلي:

// قائمة من النصوص
val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil))
// قائمة من الأعداد الصحيحة
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// قائمة فارغة
val empty = Nil
// قائمة مرتبعة
val dim = (1 :: (0 :: (0 :: Nil))) ::
          (0 :: (1 :: (0 :: Nil))) ::
          (0 :: (0 :: (1 :: Nil))) :: Nil

عمليات القائمة الأساسية

قائمة Scala تحتوي على ثلاث عمليات أساسية:

  • head تعود بعنصر أول القائمة

  • tail تعود بقائمة تحتوي على جميع العناصر باستثناء العنصر الأول

  • isEmpty تعود بـ true عند فارغة القائمة

كل عملية على قائمة Scala يمكن التعبير عنها باستخدام هذه العمليات الأساسية. مثال أدناه:

// قائمة من النصوص
object Test {
   def main(args: Array[String]) {
      val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil))
      val nums = Nil
      println( "الموقع الأول هو : " + site.head )
      println( "آخر موقع هو : " + site.tail )
      println( "عرض القائمة site هل هي فارغة : " + site.isEmpty )
      println( "عرض nums هل هي فارغة : " + nums.isEmpty )
   {}
{}

إذا قمت بتشغيل الشيفرة أعلاه، النتيجة ستكون:

$ vim Test.scala 
$ scala Test.scala 
الموقع الأول هو : w3codebox
آخر موقع هو : قائمة(Google, Baidu)
عرض القائمة site هل هي فارغة : لا
تحقق من ما إذا كانت nums فارغة: true

لربط القوائم

يمكنك استخدام ::: أو List.:::() أو List.concat() طريقة لربط قائمتين أو أكثر. مثال:

object Test {
   def main(args: Array[String]) {
      قيمة site1 = "w3codebox" :: ("Google" :: ("Baidu" :: Null))
      قيمة site2 = "Facebook" :: ("Taobao" :: Null)
      // استخدام عميل :::
      مغير fruit = site1 ::: site2
      اطبع("site1 ::: site2: " + fruit)
      
      // استخدام طريقة List.:::()
      fruit = site1.:::(site2)
      اطبع("site1.:::(site2): " + fruit)
      // استخدام طريقة concat
      fruit = List.concat(site1, site2)
      اطبع("List.concat(site1, site2): " + fruit)
      
   {}
{}

إذا قمت بتشغيل الشيفرة أعلاه، النتيجة ستكون:

$ vim Test.scala 
$ scala Test.scala 
site1 ::: site2: قائمة(w3codebox, Google, Baidu, Facebook, Taobao)
site1.:::(site2): قائمة(Facebook, Taobao, w3codebox, Google, Baidu)
List.concat(site1, site2): قائمة(w3codebox, Google, Baidu, Facebook, Taobao)

List.fill()

يمكننا استخدام طريقة List.fill() لإنشاء قائمة تحتوي على عدد معين من العناصر المكررة:

object Test {
   def main(args: Array[String]) {
      قيمة site = قائمة.ملء(3)("w3codebox")    // مكرر w3codebox 3 مرات
      اطبع("موقع: " + site)
      قيمة num = قائمة.ملء(10)(2)    // عناصر مكررة 2, 10 مرات
      اطبع("رقم: " + num)
   {}
{}

إذا قمت بتشغيل الشيفرة أعلاه، النتيجة ستكون:

$ vim Test.scala 
$ scala Test.scala 
الموقع: قائمة(w3codebox, w3codebox, w3codebox)
رقم: قائمة(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

List.tabulate()

يستخدم طريقة List.tabulate() لتوليد القائمة من خلال الدالة المقدمة.

الparameter الأول للطريقة هو عدد العناصر، يمكن أن يكون ثنائي الأبعاد، والparameter الثاني هو الدالة المحددة، نحن نحسب النتائج من خلال الدالة المحددة ونقوم بإدراج القيمة في القائمة، بدءًا من القيمة 0، مثال أدناه:

object Test {
   def main(args: Array[String]) {
      // إنشاء 5 عناصر باستخدام الدالة المقدمة
      val squares = List.tabulate(6)(n => n * n)
      println("واحدة الأبعاد : " + squares)
      // إنشاء قائمة ثنائية
      val mul = List.tabulate(4,5)(_ * _)      
      println("متعددة الأبعاد : " + mul)
   {}
{}

إذا قمت بتشغيل الشيفرة أعلاه، النتيجة ستكون:

$ vim Test.scala 
$ scala Test.scala 
واحدة الأبعاد : List(0, 1, 4, 9, 16, 25)
متعددة الأبعاد : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

List.reverse

List.reverse يُستخدم لتغيير ترتيب القائمة، مثال أدناه:

object Test {
   def main(args: Array[String]) {
      val site = "w3codebox" :: ("Google" :: ("Baidu" :: Nil))
      println("site قبل التحويل : " + site)
      println("site بعد التحويل : " + site.reverse)
   {}
{}

إذا قمت بتشغيل الشيفرة أعلاه، النتيجة ستكون:

$ vim Test.scala 
$ scala Test.scala 
site قبل التحويل : List(w3codebox, Google, Baidu)
site بعد التحويل : List(Baidu, Google, w3codebox)

الطرق العادية لـ Scala List

في الجدول التالي تم عرض القائمة العادية من Scala List:

الرقمالطريقة والوصف
1

def +:(elem: A): List[A]

لإضافة عناصر إلى القائمة مسبقًا

scala> val x = List(1)
x: List[Int] = List(1)
scala> val y = 2 +: x
List[Int] = List(2, 1)
scala> println(x)
List(1)
2

def ::(x: A): List[A]

在列表开头添加元素

3

def :::(prefix: List[A]): List[A]

在列表开头添加指定列表的元素

4

def :+(elem: A): List[A]

复制添加元素后列表。

scala> val a = List(1)
a: List[Int] = List(1)
scala> val b = a :+ 2
b: List[Int] = List(1, 2)
scala> println(a)
List(1)
5

def addString(b: StringBuilder): StringBuilder

将列表的所有元素添加到 StringBuilder

6

def addString(b: StringBuilder, sep: String): StringBuilder

将列表的所有元素添加到 StringBuilder,并指定分隔符

7

def apply(n: Int): A

通过列表索引获取元素

8

def contains(elem: Any): Boolean

检测列表中是否包含指定的元素

9

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

将列表的元素复制到数组中。

10

def distinct: List[A]

去除列表的重复元素,并返回新列表

11

def drop(n: Int): List[A]

丢弃前n个元素,并返回新列表

12

def dropRight(n: Int): List[A]

丢弃最后n个元素,并返回新列表

13

def dropWhile(p: (A) => Boolean): List[A]

从左向右丢弃元素,直到条件p不成立

14

def endsWith[B](that: Seq[B]): Boolean

检测列表是否以指定序列结尾

15

def equals(that: Any): Boolean

�断是否相等

16

def exists(p: (A) => Boolean): Boolean

التحقق من وجود عنصر يتوافق مع الشروط المحددة في القائمة.

التحقق من وجود l لعنصر معين:

scala> l.exists(s => s == "Hah")
res7: Boolean = true
17

def filter(p: (A) => Boolean): List[A]

الإطلاق على جميع العناصر التي تتوافق مع الشروط المحددة

فرز العناصر بطول 3

scala> l.filter(s => s.length == 3)
res8: List[String] = List(Hah, WOW)
18

def forall(p: (A) => Boolean): Boolean

التحقق من جميع العناصر.

مثالًا: التحقق من أن جميع العناصر تبدأ بحرف "H"

scala> l.forall(s => s.startsWith("H")) res10: Boolean = false
19

def foreach(f: (A) => Unit): Unit

تطبيق الدالة على جميع عناصر القائمة

20

def head: A

الحصول على العنصر الأول في القائمة

21

def indexOf(elem: A, from: Int): Int

من الموضع المحدد from البحث عن موضع أول ظهور العنصر

22

def init: List[A]

العودة على جميع العناصر باستثناء الأخيرة

23

def intersect(that: Seq[A]): List[A]

حساب الت交汇 بين عدة مجموعات

24

def isEmpty: Boolean

التحقق من أن القائمة فارغة

25

def iterator: Iterator[A]

إنشاء م迭代ر جديد للتحكم في العناصر

26

def last: A

العودة على العنصر الأخير

27

def lastIndexOf(elem: A, end: Int): Int

البحث عن موضع آخر ظهور العنصر في الموضع المحدد end

28

def length: Int

العودة على طول القائمة

29

def map[B](f: (A) => B): List[B]

إعادة حساب جميع العناصر باستخدام الطريقة المقدمة

30

def max: A

البحث عن العنصر الأكبر

31

def min: A

البحث عن العنصر الأصغر

32

def mkString: String

عرض جميع العناصر ك نص

33

33

def mkString(sep: String): String

عرض جميع عناصر القائمة كنص باستخدام فاصل

34

def reverse: List[A]

عكس القائمة

35

def sorted[B >: A]: List[A]

ترتيب القائمة

36

def startsWith[B](that: Seq[B], offset: Int): Boolean

التحقق من whether the list contains the specified sequence at the specified position

37

def sum: A

حساب مجموع عناصر المجموعة

38

def tail: List[A]

العودة إلى جميع العناصر باستثناء الأولى

39

def take(n: Int): List[A]

استخراج العناصر الأولى n من القائمة

40

def takeRight(n: Int): List[A]

استخراج العناصر الأخيرة n من القائمة

41

def toArray: Array[A]

تحويل القائمة إلى مصفوفة

42

def toBuffer[B >: A]: Buffer[B]

العودة إلى المخزن المؤقت الذي يحتوي على جميع عناصر القائمة

43

تحويل القائمة إلى خريطة

44

def toSeq: Seq[A]

تحويل القائمة إلى سلسلة من الأرقام

45

def toSet[B >: A]: Set[B]

تحويل القائمة إلى مجموعة

46

def toString(): String

تحويل القائمة إلى سلسلة

يمكنك الرجوع إلى المزيد من الطرق مستندات API

المجموعات لScala