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

Scala Set (مجموعة)

جمعيات Scala

Scala Set (مجموعة) هي مجموعة من الأجرام بدون تكرار، وكل العناصر متفردة.

تُقسّم مجموعات Scala إلى مجموعات غير محددة ومحددة.

بشكل افتراضي، يستخدم Scala مجموعة غير محددة، إذا كنت ترغب في استخدام مجموعة غير محددة،则需要 الاستيراد scala.collection.mutable.Set الحزمة.

بالتأكيد، يستخدم Scala مجموعة غير محددة بشكل افتراضي، إذا كنت ترغب في استخدام مجموعة غير محددة،则需要 الاستيراد

val set = Set(1,2,3)
println(set.getClass.getName) // 
println(set.exists(_ % 2 == 0)) // true
println(set.drop(1)) // Set(2,3)

إذا كنت بحاجة إلى استخدام مجموعة غير محددة،则需要引入 scala.collection.mutable.Set:

import scala.collection.mutable.Set // يمكن إدخال مجموعة غير محددة في أي مكان
val mutableSet = Set(1,2,3)
println(mutableSet.getClass.getName) // scala.collection.mutable.HashSet
mutableSet.add(4)
mutableSet.remove(1)
mutableSet += 5
mutableSet -= 2
println(mutableSet) // Set(5, 3, 4)
val another = mutableSet.toSet
println(another.getClass.getName) // scala.collection.immutable.Set

注意:虽然可变Set和不可变Set都有添加或删除元素的操作,但是有一个非常大的差别。对不可变Set进行操作,会产生一个新的set,原来的set并没有改变,这与List一样。 而对可变Set进行操作,改变的是该Set本身,与ListBuffer类似。

集合基本操作

Scala集合有三个基本操作:

  • head 返回集合第一个元素

  • tail 返回一个集合,包含除了第一元素之外的其他元素

  • isEmpty 在集合为空时返回true

对于Scala集合的任何操作都可以使用这三个基本操作来表达。示例如下:

object Test {
   def main(args: Array[String]) {
      val site = Set(“w3codebox”, “Google”, “Baidu”)
      val nums: Set[Int] = Set()
      println(“第一网站是 : ” + site.head)
      println(“最后一个网站是 : ” + site.tail)
      println(“查看列表 site 是否为空 : ” + site.isEmpty)
      println(“查看 nums 是否为空 : ” + nums.isEmpty)
   }
}

ت�行 فوق الكود، نتائج النشر هي:

$ vim Test.scala 
$ scala Test.scala 
第一网站是 : w3codebox
最后一个网站是 : Set(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true

连接集合

يمكنك استخدام ++ 运算符或 Set.++() 方法来连接两个集合。如果元素有重复的就会移除重复的元素。示例如下:

object Test {
   def main(args: Array[String]) {
      val site1 = Set(“w3codebox”, “Google”, “Baidu”)
      val site2 = Set("Faceboook", "Taobao")
      // ++ كعملاق
      var site = site1 ++ site2
      println("site1 ++ site2 : " + site)
      // ++ كطريقة
      site = site1.++(site2)
      println("site1.++(site2) : " + site)
   }
}

ت�行 فوق الكود، نتائج النشر هي:

$ vim Test.scala 
$ scala Test.scala 
site1 ++ site2 : Set(Faceboook, Taobao, Google, Baidu, w3codebox)
site1.++(site2) : Set(Faceboook, Taobao, Google, Baidu, w3codebox)

البحث عن أكبر وأصغر عنصر في المجموعة

يمكنك استخدام Set.min طريقة البحث عن أصغر عنصر في المجموعة، باستخدام Set.max طريقة البحث عن أكبر عنصر في المجموعة. مثال أدناه:

object Test {
   def main(args: Array[String]) {
      val num = Set(5,6,9,20,30,45)
      // البحث عن أكبر وأصغر عنصر في المجموعة
      println("Set(5,6,9,20,30,45) أصغر عنصر في المجموعة هو: " + num.min)
      println("Set(5,6,9,20,30,45) أكبر عنصر في المجموعة هو: " + num.max)
   }
}

ت�行 فوق الكود، نتائج النشر هي:

$ vim Test.scala 
$ scala Test.scala 
أصغر عنصر في مجموعة Set(5,6,9,20,30,45) هو: 5
أكبر عنصر في مجموعة Set(5,6,9,20,30,45) هو: 45

تقاء

يمكنك استخدام Set.& طريقة أو  Set.intersect طريقة لعرض عناصر التقاء مجموعتين. مثال أدناه:

object Test {
   def main(args: Array[String]) {
      val num1 = Set(5,6,9,20,30,45)
      val num2 = Set(50,60,9,20,35,55)
      // ت交集
      println("num1.&(num2) : " + num1.&(num2))
      println("num1.intersect(num2) : " + num1.intersect(num2))
   }
}

ت�行 فوق الكود، نتائج النشر هي:

$ vim Test.scala 
$ scala Test.scala 
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)

أساليب مجموعة Scala الشائعة

في الجدول أدناه، تم عرض الأساليب الشائعة لمجموعة Scala:

الترقيمالأساليب والوصف
1

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

إضافة عنصر جديد إلى المجموعة وإنشاء مجموعة جديدة، إلا إذا كان العنصر موجودًا بالفعل

2

def -(elem: A): Set[A]

إزالة العنصر من المجموعة وإنشاء مجموعة جديدة

3

def contains(elem: A): Boolean

إذا كان العنصر موجودًا في المجموعة، يتم العودة إلى true، وإلا يتم العودة إلى false.

4

def &(that: Set[A]): Set[A]

العودة إلى الت交汇 بين مجموعتين

5

def &~(that: Set[A]): Set[A]

العودة إلى الفرق بين مجموعتين

6

def +(elem1: A, elem2: A, elems: A*): Set[A]

إنشاء مجموعة جديدة غير قابلة للتغيير من خلال إضافة العناصر المحددة إلى المجموعة المقدمة

7

def ++(elems: A): Set[A]

دمج مجموعتين

8

def -(elem1: A, elem2: A, elems: A*): Set[A]

إنشاء مجموعة جديدة غير قابلة للتغيير من خلال إزالة العناصر المحددة من المجموعة المقدمة

9

def addString(b: StringBuilder): StringBuilder

إضافة جميع العناصر في مجموعة غير قابلة للتغيير إلى منطقية النص

10

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

إضافة جميع العناصر في مجموعة غير قابلة للتغيير إلى منطقية النص باستخدام الفاصل المحدد

11

def apply(elem: A)

تحديد ما إذا كانت المجموعة تحتوي على العنصر المحدد

12

def count(p: (A) => Boolean): Int

حساب عدد العناصر في المجموعة التي ت satisfy الشروط المحددة

13

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

نسخ عناصر مجموعة غير قابلة للتغيير إلى مصفوفة

14

def diff(that: Set[A]): Set[A]

مقارنة مجموعتين للحصول على الفرق بينهما

15

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

العودة إلى مجموعة جديدة تحتوي على العناصر التي تم إسقاطها قبل n عنصرًا

16

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

يعود مجموعة جديدة بعد إزالة آخر n عناصر

17

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

إزالة العناصر من اليسار إلى اليمين حتى لا تنطبق الشروط p

18

def equals(that: Any): Boolean

يمكن استخدام طريقة equals لكل سلسلة. تستخدم للتحقق من أن السلسلة متطابقة.

19

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

تحديد ما إذا كان العنصر الذي يلبي الشروط المحددة موجودًا في المجموعة الثابتة

20

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

إخراج جميع العناصر في المجموعة الثابتة التي تلبي الشروط المحددة

21

def find(p: (A) => Boolean): Option[A]

البحث عن العنصر الأول الذي يلبي الشروط المحددة في المجموعة الثابتة

22

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

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

23

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

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

24

def head: A

الحصول على العنصر الأول في المجموعة الثابتة

25

def init: Set[A]

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

26

def intersect(that: Set[A]): Set[A]

حساب مصفوفة مجموعتين

27

def isEmpty: Boolean

تحديد ما إذا كانت المجموعة فارغة

28

def iterator: Iterator[A]

إنشاء متكرر جديد لاستبدال العناصر

29

def last: A

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

30

def map[B](f: (A) => B): immutable.Set[B]

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

31

def max: A

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

32

def min: A

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

33

def mkString: String

تظهر جميع عناصر المجموعة ك

34

def mkString(sep: String): String

استخدام حرف الفاصلة لتظهر جميع عناصر المجموعة ك

35

def product: A

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

36

def size: Int

يعود بالنسبة لعدد عناصر المجموعة غير المتغيرة

37

def splitAt(n: Int): (Set[A], Set[A])

قسمة المجموعة غير المتغيرة إلى عناصرين، الأول يتكون من n العناصر الأولى، والثاني يتكون من العناصر المتبقية

38

def subsetOf(that: Set[A]): Boolean

إذا كانت المجموعة تحتوي على مجموعة فرعية، يعود true، وإلا يعود false

39

def sum: A

يعود بالنسبة لعدد النقاط من جميع العناصر الرقمية في المجموعة غير المتغيرة

40

def tail: Set[A]

يعود بالنسبة لكل عنصر في المجموعة غير المتغيرة باستثناء العنصر الأول

41

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

يعود بالنسبة لعدد n العناصر الأولى

42

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

يعود بالنسبة لعدد n العناصر الأخيرة

43

def toArray: Array[A]

تحويل المجموعة إلى مصفوفة

44

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

يعود بنسخة من Buffer، تحتوي على جميع عناصر المجموعة غير المتغيرة

45

def toList: List[A]

يعود بنسخة من List، تحتوي على جميع عناصر المجموعة غير المتغيرة

46

def toMap[T, U]: Map[T, U]

يعود بنسخة من Map، تحتوي على جميع عناصر المجموعة غير المتغيرة

47

def toSeq: Seq[A]

يعود بنسخة من Seq، تحتوي على جميع عناصر المجموعة غير المتغيرة

48

def toString(): String

يعود بنسخة من النص، ممثلة كعنصر

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

جمعيات Scala