Scala slice Funktion

Heute werden wir uns die Scala-Slice-Funktion ansehen.

Scala Slice

Die Scala-Slice-Funktion ist in den folgenden API-Klassen verfügbar:

Wir werden jede API auswählen und sie im nächsten Abschnitt ausführlich mit passenden Beispielen diskutieren.

Verwendung der Scala Slice-Funktion

Im Scala-API wird die Funktion ’slice‘ verwendet, um ein Intervall von Elementen auszuwählen. Sie nimmt zwei Parameter vom Typ „Int“ entgegen und gibt eine Teilmenge oder das gesamte Original-Objekt (oder String oder Array) zurück. Ein realistisches Szenario für die Verwendung von slice: Wir können diese Slice-Funktion auch in unserem regulären Alltagsleben verwenden, wie unten gezeigt. Hier bedeutet Bread.slice(0,10), Brot von 0 bis 9 zu nehmen, also insgesamt 10 Brotscheiben. (Nur um die Slice-Funktion von Scala hier zu ähneln, verwende ich null, aber stelle es dir als eins vor.) Syntax der Slice-Funktion: In der Scala-Standardbibliothek (API) ist diese Slice-Funktion wie folgt definiert:

  def slice(from-index: Int, until-index: Int): ScalaAPIClass[A]

Hier bedeutet „ScalaAPIClass“ jede Scala-Collection-Klasse (die einen indexbasierten Zugriff unterstützt, wie Seq, List usw.), String-, Array-Klassen. Beispiel: Die folgende Funktion ist in der Seq-Klasse der Scala-API definiert.

  def slice(from-index: Int, until-index: Int): Seq[A]

Parameter der slice-Funktion: Die Verwendung der Parameter der „slice“-Funktion wird in der folgenden Tabelle beschrieben:

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).

Die slice-Funktion extrahiert Elemente, beginnend mit dem ‚ersten Index‘ (inklusiv) bis zum ‚bis-Index‘ (exklusiv). Hier stehen die Elementnummern für ein Array von Zahlen, Zeichen für einen String, ein Objekt für eine Sammlung.

Scala-Array-Slice

In der Scala-API definiert die Array-Klasse die slice-Funktion wie folgt:

def slice(from: Int, until: Int): Array[T]

Hier ist der Startindex (einschließlich) des Arrays und ‚until‘ ist der Endindex (ausschließlich) des Arrays. Beispiele für die Array-Schnittfunktion:

scala> val marksArray = Array(56,79,60,99,71)
marksArray: Array[Int] = Array(56, 79, 60, 99, 71)

Ein Int-Array mit 5 Werten wird erstellt, daher ist der Startwert des Index 0 und der Endwert des Index 4. Die Länge beträgt 5. Lassen Sie uns jetzt mit der Schnittfunktion spielen.

scala> marksArray.slice(0,2)
res0: Array[Int] = Array(56, 79)

Es beginnt mit dem Index 0, das ist das erste Element, und ruft alle Elemente ab, bis 2 bedeutet Index = 1, deshalb haben wir hier das 0. Element und das 1. Element erhalten.

scala> marksArray.slice(3,4)
res1: Array[Int] = Array(99)

Wir können auf jeden Indexbereich zugreifen.

scala> marksArray.slice(3,3)
res2: Array[Int] = Array()

Wenn wir dieselben Werte für Start und Ende wie oben angeben, erhalten wir ein leeres Array, warum? Startindex = 3 Endindex = 3 – 1 = 2 Es ist nicht möglich, eine Gruppe von Elementen aus einem Array von 3 bis 2 Indizes abzurufen, oder?

scala> marksArray.slice(-1,3)
res3: Array[Int] = Array(56, 79, 60)

Wenn wir negative Werte angeben, beginnt es einfach mit dem verfügbaren Index, wie oben gezeigt.

scala> marksArray.slice(0,5)

res4: Array[Int] = Array(56, 79, 60, 99, 71)

Wenn wir den Wert des 2. Parameters über den verfügbaren Index hinaus angeben (Der maximale verfügbare Indexwert in marksArray beträgt nur 4, da die Länge 5 beträgt), ignoriert es einfach diesen Wert und gibt nur bis zum verfügbaren Index zurück. HINWEIS: – Anders als in Java wirft es keine ArrayIndexOutOfBoundsException.

Slice der Scala Collection

In der Standard-API von Scala definieren die meisten Klassen diese Slice-Funktion, die den Zugriff auf indexbasierte Elemente unterstützt. Zum Beispiel definiert die Klasse List diese Funktion wie folgt:

def slice(from: Int, until: Int): List[A]

Beispiele für die Listen-Slice-Funktion: Genauso wie bei Array-Beispielen erhalten wir für jede Sammlungs-API dieselben Ergebnisse.

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)

Wenn wir auf eine leere Liste zugreifen, erhalten wir nur eine leere Liste, wie unten gezeigt

scala> val list2 = List()
list2: List[Nothing] = List()

scala> list2.slice(0,1)

res10: List[Nothing] = List()

Scala-String-Slice

In der Scala-API wird die Klasse „StringOps“ im Paket scala.collection.immutable definiert. Sie definiert die Slice-Funktion wie unten gezeigt:

def slice(from: Int, until: Int): String

HINWEIS:- In Scala verwenden wir die String-Klasse von Java. Diese Klasse hat jedoch keine Slice-Funktion. Wenn wir die Slice-Funktion auf Java-Stringobjekten verwenden, konvertiert der Scala-Compiler dieses String-Objekt intern in ein Objekt der Klasse StringOps, um diese Slice-Funktion zu verwenden. (Nicht nur die Slice-Funktion, sondern auch viele weitere. Weitere Informationen finden Sie in der Scala-API.) Das bedeutet, dass „StringOps“ eine implizite Klasse der String-Klasse ist. Beispiele für die String-Slice-Funktion:

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

Wie wir wissen, beginnt der String-Index mit Null. Hier bedeutet from-index = 6 bis-index = 9 (Es ist exklusiv, daher müssen wir bis Index = 8 beachten) Die Teilzeichenkettenfunktion des Strings funktioniert genauso wie seine Slice-Funktion, wie unten gezeigt:

scala> str.substring(6,9)
res12: String = I'm

Hier geben sowohl str.slice(6,9) als auch str.substring(6,9) denselben Wert zurück. Slice Vs Substring Unterschied zwischen den Slice- und Substring-Funktionen der String-Klasse

  • Was die Funktionalität und Syntax betrifft, gibt es keinen Unterschied
  • Die Leistung ist fast gleich und zu vernachlässigen.

HINWEIS:- In Scala können wir auf Zeichenfolgenzeichen genauso wie auf Arrayelemente zugreifen, wie unten gezeigt:

scala> str(0)
res0: Char = H

Hier wird ein Char zurückgegeben, aber kein 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

HINWEIS:- Wenn wir versuchen, auf Zeichenfolgenzeichen außerhalb des Bereichs zuzugreifen, erhalten wir eine StringIndexOutOfBoundsException, wie oben gezeigt. Der Zugriff auf Zeichen einer Zeichenfolge gibt ein Char zurück, während die Funktionen für Teilzeichenfolgen und Slices einen String zurückgeben, wie unten gezeigt.

scala> str(0)
res4: Char = H

scala> str.substring(0,1)
res5: String = H

scala> str.slice(0,1)
res6: String = H

Das ist alles zur Verwendung der „Slice-Funktion in Scala“. Wir werden in meinen kommenden Beiträgen einige weitere Scala-Konzepte besprechen. Referenz: Scala-API-Dokument

Source:
https://www.digitalocean.com/community/tutorials/scala-slice-function