اليوم سنتعرف على وظيفة قص السكالا.
قص السكالا
وظيفة قص السكالا متاحة في الفئات البرمجية التالية:
سنستعرض كل فئة بشكل منفصل ونناقشها بالتفصيل مع أمثلة مناسبة في القسم التالي.
استخدام وظيفة قص السكالا
في واجهة برمجة تطبيقات سكالا ، يُستخدم الدالة “slice” لتحديد فترة من العناصر. يأخذ هذا الدالة معاملين من نوع “Int” ويعيد مجموعة فرعية أو كاملة أو عدم وجود عنصر (أو سلسلة أو مصفوفة) من المجموعة الأصلية. سيناريو حقيقي للاستخدام: يمكننا استخدام هذه الدالة “slice” في حياتنا الواقعية العادية أيضًا كما هو موضح أدناه. هنا ، يعني “Bread.slice(0,10)” أخذ شرائح الخبز من 0 إلى 9 ، إجمالي 10 شرائح خبز. (فقط لاشتباه دالة “slice” في سكالا هنا أستخدم الصفر ، ولكن افترض هذا كواحد.) صيغة الدالة “slice”: في مكتبة سكالا القياسية (واجهة برمجة التطبيقات) ، يتم تعريف هذه الدالة “slice” على النحو التالي:
def slice(from-index: Int, until-index: Int): ScalaAPIClass[A]
هنا “ScalaAPIClass” يعني أي فئة مجموعة سكالا (التي تدعم الوصول بواسطة الفهرس مثل Seq ، List إلخ) ، فئات السلسلة والمصفوفة. مثال: يتم تعريف الوظيفة التالية في فئة Seq في واجهة برمجة التطبيقات سكالا.
def slice(from-index: Int, until-index: Int): Seq[A]
معاملات الدالة “slice”: يتم شرح استخدام معاملات الدالة “slice” في الجدول التالي:
S.No. | Function Params | Usage |
---|---|---|
1. | First Parameter | Starting index (Inclusive). It should be zero or any any positive integer less than the length of the Collection or String or Array. |
2. | Second Parameter | Ending index (Exclusive). |
تستخرج دالة “slice” العناصر بدءًا من ‘first-index’ (شامل) إلى ‘until-index’ (حصري). هنا أرقام العناصر لمصفوفة الأرقام ، الأحرف لسلسلة ، كائن لمجموعة.
تقسيم مصفوفة سكالا
في واجهة برمجة التطبيقات سكالا ، تعرف فئة Array الدالة “slice” على النحو التالي:
def slice(from: Int, until: Int): Array[T]
هنا ‘من’ هو مؤشر البداية (شامل) للمصفوفة و ‘حتى’ هو مؤشر النهاية (غير شامل) للمصفوفة. أمثلة على وظيفة تقطيع المصفوفة:
scala> val marksArray = Array(56,79,60,99,71)
marksArray: Array[Int] = Array(56, 79, 60, 99, 71)
تم إنشاء مصفوفة بخمس قيم ، لذا فإن قيمة بداية المؤشر هي 0 وقيمة نهاية المؤشر هي 4. طولها = 5 دعنا نلعب مع وظيفة التقطيع الآن.
scala> marksArray.slice(0,2)
res0: Array[Int] = Array(56, 79)
يبدأ بالفهرس 0 وهو العنصر الأول ويسترد جميع العناصر حتى 2 أي الفهرس = 1 ولهذا السبب حصلنا على العنصر الصفري والعنصر الأول هنا.
scala> marksArray.slice(3,4)
res1: Array[Int] = Array(99)
يمكننا الوصول بأي مجموعة من المؤشرات.
scala> marksArray.slice(3,3)
res2: Array[Int] = Array()
إذا قدمنا نفس القيم للبداية والنهاية مثل أعلاه ، سنحصل على مصفوفة فارغة لماذا؟ قيمة الفهرس البداية = 3 قيمة الفهرس النهاية = 3 – 1 = 2 ليس من الممكن استرداد مجموعة عناصر من مصفوفة من 3 إلى 2 فهرس صحيح.
scala> marksArray.slice(-1,3)
res3: Array[Int] = Array(56, 79, 60)
إذا قدمنا قيم سالبة ، فإنه يبدأ فقط بالفهرس المتاح كما هو مبين أعلاه.
scala> marksArray.slice(0,5)
res4: Array[Int] = Array(56, 79, 60, 99, 71)
إذا قدمنا قيمة ثانية للمعامل تتجاوز الفهرس المتاح كما هو مبين أعلاه (الفهرس الأقصى المتاح في marksArray هو 4 فقط لأن طولها = 5) ، فإنه يتجاهل هذه القيمة ويعيد حتى الفهرس المتاح فقط. ملاحظة: – على عكس جافا ، فإنه لا يقذف أي ArrayIndexOutOfBoundsException.
تجميع سكالا قطعة
في واجهة برمجة التطبيقات القياسية لسكالا ، يحدد معظم الفئات هذه الوظيفة التي تدعم الوصول إلى العناصر بناءً على الفهارس. على سبيل المثال ، تحدد فئة List هذه الوظيفة على النحو المبين أدناه:
def slice(from: Int, until: Int): List[A]
أمثلة على وظيفة قطع القائمة:- كما هو الحال في أمثلة الصفيف ، سنحصل على نفس النتائج لأي واجهة برمجة تطبيقات للمجموعة.
scala> val list = List(56, 79, 60, 99, 71)
list: List[Int] = List(56, 79, 60, 99, 71)
scala> list.slice(0,2)
res5: List[Int] = List(56, 79)
scala> list.slice(3,4)
res6: List[Int] = List(99)
scala> list.slice(3,3)
res7: List[Int] = List()
scala> list.slice(-1,3)
res8: List[Int] = List(56, 79, 60)
scala> list.slice(0,5)
res9: List[Int] = List(56, 79, 60, 99, 71)
إذا قمنا بالوصول إلى قائمة فارغة ، فسنحصل على قائمة فارغة فقط كما هو موضح أدناه
scala> val list2 = List()
list2: List[Nothing] = List()
scala> list2.slice(0,1)
res10: List[Nothing] = List()
قطع سلسلة Scala
في واجهة برمجة التطبيقات Scala ، يتم تعريف فئة “StringOps” في حزمة scala.collection.immutable. تعرف وظيفة القطع على النحو المبين أدناه:
def slice(from: Int, until: Int): String
ملاحظة:- في سكالا ، نستخدم فئة سلسلة جافا. ولكن هذه الفئة لا تحتوي على وظيفة القطع. عند استخدام وظيفة القطع على كائنات سلسلة جافا ، يقوم مترجم سكالا بتحويل هذا الكائن سلسلة إلى كائن فئة StringOps لاستخدام هذه الوظيفة. (ليس فقط وظيفة القطع ، هناك المزيد. انظر واجهة برمجة التطبيقات Scala لمزيد من المعلومات.) وهذا يعني أن “StringOps” هو فئة ضمنية لفئة String. أمثلة وظيفة قطع السلسلة:-
scala> val str = "Hello I'm doing good. How are you?"
str: String = Hello I'm doing good. How are you?
scala> str.slice(6,9)
res8: String = I'm
كما نعلم ، يبدأ فهرس السلسلة بالصفر. هنا من الفهرس = 6 يعني حتى الفهرس = 9 (إنها حصرية لذلك يجب أن نأخذ في الاعتبار الفهرس = 8 فقط) وظيفة الجزء الفرعي للسلسلة تعمل بنفس طريقة وظيفة القطع كما هو موضح أدناه:
scala> str.substring(6,9)
res12: String = I'm
هنا كلا العبارتين str.slice(6,9) و str.substring(6,9) تُعيدان نفس القيمة. القطع مقابل الجزء الفرعي الفرق بين وظيفتي القطع والجزء الفرعي في فئة السلسلة
- من حيث الوظيفة والصيغة ، لا يوجد فرق
- الأداء متقارب تقريبًا ويمكن تجاهله.
ملاحظة: – في سكالا ، يمكننا الوصول إلى أحرف السلسلة تمامًا مثل عناصر المصفوفة كما هو موضح أدناه:
scala> str(0)
res0: Char = H
هنا يتم إرجاع Char ، وليس String
scala> str(-1)
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.charAt(String.java:658)
at scala.collection.immutable.StringOps$.apply$extension(StringOps.scala:38)
... 33 elided
scala> str.length
res2: Int = 34
scala> str(34)
java.lang.StringIndexOutOfBoundsException: String index out of range: 34
at java.lang.String.charAt(String.java:658)
at scala.collection.immutable.StringOps$.apply$extension(StringOps.scala:38)
... 33 elided
ملاحظة: – إذا حاولنا الوصول إلى أحرف السلسلة خارج النطاق ، فسنحصل على استثناء StringIndexOutOfBoundsException كما هو موضح أعلاه. يُرجع وصول أحرف السلسلة بنوع البيانات Char ، بينما تُرجع وظائف substring و slice قيمة String كما هو موضح أدناه.
scala> str(0)
res4: Char = H
scala> str.substring(0,1)
res5: String = H
scala> str.slice(0,1)
res6: String = H
هذا هو كل شيء حول استخدام “وظيفة قطعية سكالا”. سنناقش بعض مفاهيم سكالا الأخرى في مشاركاتي القادمة. المرجع: وثائق واجهة برمجة تطبيقات سكالا
Source:
https://www.digitalocean.com/community/tutorials/scala-slice-function