Sortieren ein Array in Scala

Suraj P 12 Juli 2022
  1. Verwenden Sie die sorted-Methode, um ein Array in Scala zu sortieren
  2. Verwenden Sie die Methode sortBy(attribute), um ein Array in Scala zu sortieren
  3. Verwendung der Methode sortWith zum Sortieren eines Arrays in Scala
Sortieren ein Array in Scala

In diesem Artikel lernen wir, wie man ein Array von Daten in der Programmiersprache Scala sortiert.

Sortieren bezieht sich auf das Anordnen der Daten in aufsteigender oder absteigender Reihenfolge basierend auf einer bestimmten Bedingung. Es ist eine sehr häufig verwendete Methode, wenn wir etwas in einem großen Datensatz suchen möchten, da wir den binären Suchalgorithmus anwenden können, der nur auf dem sortierten Datensatz funktioniert.

Scala-Sortiermethoden verwenden intern TimSort, eine Mischung aus Merge-Sort- und Insertion-Sort-Algorithmus. Schauen wir uns nun drei Sortiermethoden an, die in Scala vorhanden sind.

Verwenden Sie die sorted-Methode, um ein Array in Scala zu sortieren

Die sortierte Methode wird verwendet, um die Sequenzen in Scala wie List, Array, Vector und Seq zu sortieren. Diese Methode gibt eine neue Sammlung zurück, die nach ihrer natürlichen Reihenfolge sortiert ist.

Methodendefinition:

def sorted[Y >:X] (implicit ord:Ordering[Y]): Repr

Hier bezieht sich X auf die Art des Elements, das wir in der Sammlung verwenden. Repr ist die Art der tatsächlichen Sammlung mit den Elementen.

Sehen wir uns ein Beispiel an:

object MyClass {

    def main(args: Array[String]) {

    val seq = Seq(12,3,78,90,1)
    println(seq.sorted)

    }
}

Ausgabe:

List(1, 3, 12, 78, 90)

Standardmäßig erfolgt die Sortierung in aufsteigender Reihenfolge. Wenn wir die Daten in absteigender Reihenfolge sortieren möchten, können wir die Syntax verwenden:

sorted(Ordering.DataType.reverse)

Beispielcode:

object MyClass {

    def main(args: Array[String]) {

    val seq = Seq(12,3,78,90,1)
    println(seq.sorted(Ordering.Int.reverse))

    }
}

Ausgabe:

List(90, 78, 12, 3, 1)

Wenn wir die Methode sorted verwenden wollen, um die Daten basierend auf einem Attribut einer Fallklasse zu sortieren, müssen wir die Eigenschaft Ordered erweitern und dann die abstrakte Methode compare überschreiben. Innerhalb der compare-Methode müssen wir definieren, nach welchem ​​Attribut wir die Objekte der Case-Klasse sortieren wollen.

Dies wird als benutzerdefinierte Datensortierung bezeichnet, d. h. die Angabe unserer Bedingungen zum Sortieren der Daten.

Beispielcode:

case class student(id: Int,name: String) extends Ordered[student]
{
    def compare(that: student) = this.name compare that.name
}

val obj1 = student(1, "tony")
val obj2 = student(2, "bruce")
val obj3 = student(3, "stark")

val studentList = List(obj1,obj2,obj3)

println(studentList.sorted)

Ausgabe:

List(student(2,bruce), student(3,stark), student(1,tony))

Im obigen Code haben wir die Objekte nach dem Attribut name der Fallklasse student sortiert.

Verwenden Sie die Methode sortBy(attribute), um ein Array in Scala zu sortieren

Die Methode sortBy in Scala kann nach einem oder mehreren Klassenattributen sortieren. Diese Methode kann verwendet werden, wenn wir einen Feldtyp Bestellung im Geltungsbereich haben.

Auch hier ist die Standardsortierung aufsteigend.

Methodendefinition:

def sortBy[B](f: A => B)(implicit ord: Ordering[B]): Repr

Beispielcode:

case class employee(id: Int, name: String, salary: Double)

val obj1 = employee(1,"tony",12000.00)
val obj2 = employee(2,"bruce",11000.00)
val obj3 = employee(3,"stark",15000.00)

val empList = List(obj1,obj2,obj3)

println(empList.sortBy(_.name))

println(empList.sortBy(_.salary))

Ausgabe:

List(employee(2,bruce,11000.0), employee(3,stark,15000.0), employee(1,tony,12000.0))
List(employee(2,bruce,11000.0), employee(1,tony,12000.0), employee(3,stark,15000.0))

Im obigen Code haben wir zuerst die sortierten Daten basierend auf dem Attribut name gedruckt, und in der zweiten Druckanweisung haben wir die Daten basierend auf dem Attribut salary sortiert.

Wir können die Daten in absteigender Reihenfolge sortieren, indem wir die Methode ein wenig anpassen in:

sortBy(_.attribute)(Ordering[data_type_of_attribute].reverse)

Beispielcode:

case class employee(id: Int, name: String, salary: Double)

val obj1 = employee(1,"tony",12000.00)
val obj2 = employee(2,"bruce",11000.00)
val obj3 = employee(3,"stark",15000.00)

val empList = List(obj1,obj2,obj3)

println(empList.sortBy(_.name)(Ordering[String].reverse))

Ausgabe:

List(employee(1,tony,12000.0), employee(3,stark,15000.0), employee(2,bruce,11000.0))

Wir haben die Daten basierend auf dem Attribut name im obigen Code sortiert.

Diese Methode ist auch nützlich zum Sortieren von Daten basierend auf mehreren Attributen; Es funktioniert, indem es Daten basierend auf dem ersten Attribut sortiert. Wenn das erste Attribut dieselben Werte hat, wird es basierend auf dem zweiten Attribut sortiert.

Beispielcode:

case class employee(id: Int, name: String, salary: Double)

val obj1 = employee(1,"tony",12000.00)
val obj2 = employee(2,"bruce",11000.00)
val obj3 = employee(3,"stark",15000.00)
val obj4 = employee(4,"tony",9000.0)
val obj5 = employee(5,"stark",19000.0)
val obj6 = employee(6,"tony",10000.0)

val empList = List(obj1,obj2,obj3,obj4,obj5,obj6)

println(empList.sortBy((empList =>(empList.name,empList.salary))))

In der Ausgabe sehen wir, dass bei gleichem name die Daten nach dem Attribut Gehalt sortiert werden.

Ausgabe:

List(employee(2,bruce,11000.0), employee(3,stark,15000.0), employee(5,stark,19000.0), employee(4,tony,9000.0), employee(6,tony,10000.0), employee(1,tony,12000.0))

Mit dieser Methode können wir auch eine Liste von Tupeln nach dem ersten oder zweiten Element sortieren. Unten ist ein Beispiel für das Sortieren der Tupel basierend auf dem zweiten Element.

Beispielcode:

val list = List(('b',60),('c',10),('a',40))

println(list.sortBy(_._2))

Ausgabe:

List((c,10), (a,40), (b,60))

Auf die gleiche Weise können wir auch nach ihrem ersten Element sortieren.

Beispielcode:

val list = List(('b',60),('c',10),('a',40))

println(list.sortBy(_._1))

Ausgabe:

List((a,40), (b,60), (c,10))

Verwendung der Methode sortWith zum Sortieren eines Arrays in Scala

Die sortWith(function) ist sehr nützlich, wenn wir die Sortierung vergessen und Elemente basierend auf der angegebenen Vergleichsfunktion sortieren möchten. Wir können also jede benutzerdefinierte Vergleichsfunktion übergeben.

Methodendefinition:

def sortWith(lt: (X, X) => Boolean): Repr

Beispielcode 1:

Hier haben wir die Mitarbeiter vom höchsten zum niedrigsten Gehalt sortiert.

case class employee(id: Int, name: String, salary: Double)

val obj1 = employee(1,"tony",12000.00)
val obj2 = employee(2,"bruce",11000.00)
val obj3 = employee(3,"stark",15000.00)
val obj4 = employee(4,"naruto",200)

val empList = List(obj1,obj2,obj3,obj4)

println(empList.sortWith(_.salary > _.salary))

Ausgabe:

List(employee(3,stark,15000.0), employee(1,tony,12000.0), employee(2,bruce,11000.0), employee(4,naruto,200.0))

Beispielcode 2:

Hier übergeben wir unsere benutzerdefinierte Funktion in der Methode sortWith.

case class employee(id: Int, name: String, salary: Double)

def sortBySalary(emp1 :employee,emp2:employee): Boolean =
{
    emp1.salary < emp2.salary
}

val obj1 = employee(1,"tony",12000.00)
val obj2 = employee(2,"bruce",11000.00)
val obj3 = employee(3,"stark",15000.00)
val obj4 = employee(4,"naruto",200)

val empList = List(obj1,obj2,obj3,obj4)

println(empList.sortWith((emp1,emp2) => sortBySalary(emp1,emp2)))

Ausgabe:

List(employee(4,naruto,200.0), employee(2,bruce,11000.0), employee(1,tony,12000.0), employee(3,stark,15000.0))

Wir haben die Daten aufsteigend nach dem salary im obigen Code sortiert.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Scala Array