أساسیات Scala- المجموعات| الجزء 4

أساسيات سكالا

المقدمة

يوفر Scala مجموعة غنية من مكتبة المجموعة. يحتوي على فئات وسمات لجمع البيانات. يمكن أن تكون هذه المجموعات قابلة للتغيير أو غير قابلة للتغيير. يمكنك استخدامها وفقًا لمتطلباتك. تحتوي الحزمة Scala.collection.mutable على جميع المجموعات القابلة للتغيير. يمكنك إضافة وإزالة وتحديث البيانات أثناء استخدام هذه الحزمة.

يحتوي Scala.collection.immutable على جميع المجموعات غير القابلة للتغيير. لا يسمح لك بتعديل البيانات. يستورد Scala هذه الحزمة بشكل افتراضي. إذا كنت تريد مجموعة قابلة للتغيير فيجب عليك استيراد حزمة scala.collection.mutable في التعليمات البرمجية الخاصة بك.

للمزيد اقرأ:
أساسیات سكالا (Scala)| الجزء الأول
أساسیات Scala -نمط المطابقة والحلقات| الجزء 2
أساسیات Scala- البرمجة الشيئية| الجزء 3

التسلسل الهرمي للمجموعات غير القابلة للتغيير Scala

تحتوي الحزمة scala.collection.immutable على جميع الفئات والسمات المجردة الثابتة للمجموعات.

أساسیات Scala- المجموعات

مجموعة سكالا (scala set)

يتم استخدامه لتخزين العناصر الفريدة في المجموعة. لا تحتفظ بأي ترتيب لتخزين العناصر. يمكنك تطبيق عمليات مختلفة عليها. يتم تعريفه في الحزمة Scala.collection.immutable.

val variableName:Set[Type] = Set(element1, element2,... elementN) or  
val variableName = Set(element1, element2,... elementN)  

في هذا المثال أنشأنا مجموعة. يمكنك إنشاء مجموعة فارغة أيضًا. دعونا نرى كيفية إنشاء مجموعة.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        val set1 = Set()                            // An empty set  
        val games = Set("Cricket","Football","Hocky","Golf")    // Creating a set with elements  
        println(set1)  
        println(games)  
    }  
}  

انتاج:

Set()	// an empty set
Set(Cricket,Football,Hocky,Golf)

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

import scala.collection.immutable._  
object MainObject{  
        def main(args:Array[String]){  
            val games = Set("Cricket","Football","Hocky","Golf")  
            println(games.head)             // Returns first element present in the set  
  println(games.tail)         // Returns all elements except first element.  
            println(games.isEmpty)          // Returns either true or false  
}  
    } 

انتاج:

Cricket
Set(Football, Hocky, Golf)
False

مثال على مجموعة Scala: دمج مجموعتين

يمكنك دمج مجموعتين في مجموعة واحدة. يوفر Scala طريقة محددة مسبقًا لدمج المجموعات. في هذا المثال يتم استخدام دالة ++ لدمج مجموعتين.

import scala.collection.immutable._  
object MainObject{  
        def main(args:Array[String]){  
            val games = Set("Cricket","Football","Hocky","Golf")  
            val alphabet = Set("A","B","C","D","E")   
            val mergeSet = games ++ alphabet            // Merging two sets  
            println("Elements in games set: "+games.size)   // Return size of collection  
            println("Elements in alphabet set: "+alphabet.size)   
            println("Elements in mergeSet: "+mergeSet.size)  
            println(mergeSet)  
        }  
    }  

انتاج:

Elements in games set: 4
Elements in alphabet set: 5
Elements in mergeSet: 9
Set(E, Football, Golf, Hocky, A, B, C, Cricket, D)

يثبت هذا المثال أيضًا أن مجموعة الدمج لا تحافظ على ترتيب تخزين العناصر.

يمكنك التحقق مما إذا كان العنصر موجودًا في المجموعة أم لا. يصف المثال التالي استخدام دالة ()contains.

import scala.collection.immutable._  
object MainObject{  
        def main(args:Array[String]){  
            val games = Set("Cricket","Football","Hocky","Golf")  
            println(games)  
            println("Elements in set: "+games.size)  
            println("Golf exists in the set : "+games.contains("Golf"))  
            println("Racing exists in the set : "+games.contains("Racing"))  
              
        }  
    }  

انتاج:

Set(Cricket, Football, Hocky, Golf)
Elements in set: 4
Golf exists in the set : true
Racing exists in the set : false

مجموعة Scala:إضافة وإزالة العناصر

يمكنك إضافة أو إزالة العناصر من المجموعة. يمكنك إضافة فقط عندما تكون التعليمات البرمجية الخاصة بك قابلة للتغيير. في هذا المثال نقوم بإضافة عناصر المجموعة وإزالتها.

import scala.collection.immutable._  
object MainObject{  
        def main(args:Array[String]){  
            var games = Set("Cricket","Football","Hocky","Golf")  
            println(games)  
            games += "Racing"               // Adding new element  
            println(games)  
            games += "Cricket"              // Adding new element, it does not allow duplicacy.  
            println(games)  
            games -= "Golf"             // Removing element  
            println(games)  
        }  
    }  

انتاج:

Set(Cricket, Football, Hocky, Golf)
Set(Football, Golf, Hocky, Cricket, Racing)
Set(Football, Golf, Hocky, Cricket, Racing)
Set(Football, Hocky, Cricket, Racing)

تكرار عناصر المجموعة باستخدام حلقة for

يمكنك تكرار عناصر المجموعة إما باستخدام حلقة for أو حلقة foreach. يمكنك أيضًا تصفية العناصر أثناء التكرار. في هذا المثال تم استخدام حلقة for لتكرار عناصر المجموعة.

import scala.collection.immutable._  
object MainObject{  
        def main(args:Array[String]){  
            var games = Set("Cricket","Football","Hocky","Golf")  
            for(game <- games){  
                println(game)  
            }  
        }  
    }  

انتاج:

Cricket
Football
Hocky
Golf

مجموعة Scala تكرار العناصر باستخدام حلقة foreach

في هذا المثال نستخدم حلقة foreach لتكرار عناصر المجموعة.

import scala.collection.immutable._  
    object MainObject{  
        def main(args:Array[String]){  
            var games = Set("Cricket","Football","Hocky","Golf")  
            games.foreach((element:String)=> println(element))  
        }     
}  

انتاج:

Cricket
Football
Hocky
Golf

تعيين العمليات

في Scala Set يمكنك أيضًا استخدام العمليات الحسابية النموذجية مثل: التقاطع والاتحاد. في المثال التالي استخدمنا طرقًا محددة مسبقًا لإجراء عمليات محددة.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var games = Set("Cricket","Football","Hocky","Golf","C")  
        var alphabet = Set("A","B","C","D","E","Golf")  
        var setIntersection = games.intersect(alphabet)  
        println("Intersection by using intersect method: "+setIntersection)  
        println("Intersection by using & operator: "+(games & alphabet))  
        var setUnion = games.union(alphabet)  
        println(setUnion)  
    }  
}  

انتاج:

Intersection by using intersect method: Set(Golf, C)
Intersection by using & operator: Set(Golf, C)
Set(E, Football, Golf, Hocky, A, B, C, Cricket, D)

Scala SortedSet

في scala يمتد SortedSet سمة Set ويوفر عناصر مجموعة مرتبة. يكون مفيدًا عندما تريد عناصر مرتبة في مجموعة المجموعة. يمكنك فرز القيم الصحيحة والسلسلة كذلك.

إنها سمة ويمكنك تطبيق جميع الطرق المحددة في السمة التي يمكن اجتيازها والسمة المحددة.

في المثال التالي استخدمنا SortedSet لتخزين عناصر عدد صحيح. تقوم بإرجاع مجموعة بعد فرز العناصر.

import scala.collection.immutable.SortedSet              
object MainObject{  
    def main(args:Array[String]){  
        var numbers: SortedSet[Int] = SortedSet(5,8,1,2,9,6,4,7,2)  
        numbers.foreach((element:Int)=> println(element))  
    }     
}  

انتاج:

1
2
4
5
6
7
8
9

سكالا HashSet

HashSet فئة مختومة. فهو يمتد إلى مجموعة الخلاصة وخاصية المجموعة الثابتة. يستخدم كود التجزئة لتخزين العناصر.

لا يحافظ على ترتيب الإدراج ولا يفرز العناصر.

في المثال التالي قمنا بإنشاء HashSet لتخزين العناصر. هنا يتم استخدام foreach لتكرار العناصر.

import scala.collection.immutable.HashSet  
object MainObject{  
    def main(args:Array[String]){  
        var hashset = HashSet(4,2,8,0,6,3,45)  
        hashset.foreach((element:Int) => println(element+" "))     
   }  
}  

انتاج:

0 
6 
2 
45 
3 
8 
4

Scala BitSet

مجموعات البت هي مجموعات من الأعداد الصحيحة غير السالبة والتي يتم تمثيلها كمصفوفات ذات أحجام متغيرة من البتات معبأة في كلمات ذات 64 بت. يتم تحديد مساحة الذاكرة لمجموعة البت من خلال أكبر عدد مخزن فيها. يمتد مجموعة السمات.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var numbers = BitSet(1,5,8,6,9,0)  
        numbers.foreach((element:Int) => println(element))  
    }  
}  

انتاج:

0
1
5
6
8
9

إضافة وإزالة العناصر

يمكنك إجراء العمليات الأساسية مثل الإضافة والحذف في مجموعة البت. في المثال التالي قمنا بتطبيق هذه العمليات.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var numbers = BitSet(1,5,8,6,9,0)  
        numbers.foreach((element:Int) => print(element+" "))  
        numbers += 20               // Adding an element  
        print("\nAfter adding 20: ")  
        numbers.foreach((element:Int) => print(element+" "))  
        numbers-=0              // Deleting an element  
        print("\nAfter deleting 0: ")  
        numbers.foreach((element:Int) => print(element+" "))  
    }  
}  

انتاج:

0 1 5 6 8 9 
After adding 20: 0 1 5 6 8 9 20 
After deleting 0: 1 5 6 8 9 20

Scala ListSet

في scala تطبق فئة ListSet مجموعات ثابتة باستخدام بنية بيانات قائمة على القائمة. يتم تخزين العناصر داخليًا بترتيب إدراج معكوس مما يعني أن العنصر الأحدث في رأس القائمة. يحافظ على أمر الإدراج.

هذه المجموعة مناسبة فقط لعدد صغير من العناصر. يمكنك إنشاء ListSet فارغة إما عن طريق استدعاء المُنشئ أو بتطبيق الدالة ListSet.empty. تقوم أساليب التكرار والاجتياز الخاصة بها بزيارة العناصر بالترتيب نفسه الذي تم إدخالها به لأول مرة.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var listset = ListSet(4,2,8,0,6,3,45)  
        listset.foreach((element:Int) => println(element+" "))  
    }  
}  

انتاج:

4 
2 
8 
0 
6 
3 
45

تكوين ListSet وإضافة العناصر

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var listset:ListSet[String] = new ListSet()    // Creating empty ListSet by using constructor  
        var listset2:ListSet[String] = ListSet.empty     // Creating an empty listset  
        println("listset: "+listset)  
        println("listset2: "+listset2)  
        println("After adding new elements:")  
        listset+="India"            // Adding new element  
        listset2+="Russia"          // Adding new element  
        println("listset: "+listset)  
        println("listset2: "+listset2)  
    }  
}  

انتاج:

listset: ListSet()
listset2: ListSet()
After adding new elements:
listset: ListSet(India)
listset2: ListSet(Russia)

سكالا تسلسل seq

التسلسل سمة تمثل تسلسلات مفهرسة مضمونة غير قابلة للتغيير. يمكنك الوصول إلى العناصر باستخدام فهارسهم. يحافظ على ترتيب إدراج العناصر.

تدعم التسلسلات عددًا من الطرق للعثور على تكرارات العناصر أو التكرارات اللاحقة. تقوم بإرجاع قائمة.

في المثال التالي نقوم بإنشاء Seq والوصول إلى العناصر من Seq.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var seq:Seq[Int] = Seq(52,85,1,8,3,2,7)  
        seq.foreach((element:Int) => print(element+" "))  
        println("\nAccessing element by using index")  
        println(seq(2))  
    }  
}  

انتاج:

52 85 1 8 3 2 7 
Accessing element by using index
1

في هذا المثال قمنا بتطبيق بعض الطرق المحددة مسبقًا لسمة التسلسل.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var seq:Seq[Int] = Seq(52,85,1,8,3,2,7)  
        seq.foreach((element:Int) => print(element+" "))  
        println("\nis Empty: "+seq.isEmpty)  
        println("Ends with (2,7): "+ seq.endsWith(Seq(2,7)))  
        println("contains 8: "+ seq.contains(8))  
        println("last index of 3 : "+seq.lastIndexOf(3))  
        println("Reverse order of sequence: "+seq.reverse)  
    }  
}  

انتاج:

52 85 1 8 3 2 7 
is Empty: false
Ends with (2,7): true
contains 8: true
last index of 3 : 4
Reverse order of sequence: List(7, 2, 3, 8, 1, 85, 52)

 سكالا vectors

vector هو بنية بيانات للأغراض العامة وغير قابلة للتغيير. يوفر وصول عشوائي للعناصر. إنه جيد لمجموعة كبيرة من العناصر.

إنه يمتد إلى سمة AbstractSeq و IndexedSeq لفئة مجردة.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var vector:Vector[Int] = Vector(5,8,3,6,9,4) //Or  
        var vector2 = Vector(5,2,6,3)  
        var vector3 = Vector.empty  
        println(vector)  
        println(vector2)  
        println(vector3)  
    }  
}  

انتاج:

Vector(5, 8, 3, 6, 9, 4)
Vector(5, 2, 6, 3)
Vector(

في المثال التالي أنشأنا متجهًا. يمكنك أيضًا إضافة عنصر جديد ودمج متجهين.

import scala.collection.immutable._  
object MainObject{  
    def main(args:Array[String]){  
        var vector = Vector("Hocky","Cricket","Golf")  
        var vector2 = Vector("Swimming")  
        print("Vector Elements: ")  
        vector.foreach((element:String) => print(element+" "))  
        var newVector  = vector :+ "Racing"                             // Adding a new element into vector  
        print("\nVector Elements after adding: ")  
        newVector.foreach((element:String) => print(element+" "))  
        var mergeTwoVector = newVector ++ vector2                       // Merging two vector  
        print("\nVector Elements after merging: ")  
        mergeTwoVector.foreach((element:String) => print(element+" "))  
        var reverse = mergeTwoVector.reverse                            // Reversing vector elements  
        print("\nVector Elements after reversing: ")  
        reverse.foreach((element:String) => print(element+" "))  
        var sortedVector = mergeTwoVector.sorted                        // Sorting vector elements  
        print("\nVector Elements after sorting: ")  
        sortedVector.foreach((element:String) => print(element+" "))  
    }  
}  

انتاج:

Vector Elements: Hocky Cricket Golf 
Vector Elements after adding: Hocky Cricket Golf Racing 
Vector Elements after merging: Hocky Cricket Golf Racing Swimming 
Vector Elements after reversing: Swimming Racing Golf Cricket Hocky 
Vector Elements after sorting: Cricket Golf Hocky Racing Swimming

المصادر

الاول
الثانی
الثالث

منشور ذات صلة
لغة برمجة Scala 10 Minutes

ما هي لغة برمجة Scala؟

جاسم ناظري

الطريقة الرئيسية هي نقطة دخول برنامج Scala. تتطلب Java Virtual Machine دالة رئيسية تسمى main تأخذ وسيطة واحدة: مصفوفة من السلاسل النصية.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة