Groeperen en sorteren
groupBy en sortBy
Groeperen en sorteren is een gratis Scala voor backend-engineering en functioneel programmeren-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Scala voor backend-engineering en functioneel programmeren. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Scala voor backend-engineering en functioneel programmeren bevat in totaal 4 lessen.
Gegevens ordenen
Gegevens uit de echte wereld moeten vaak worden gegroepeerd op basis van een eigenschap of gesorteerd op basis van een sleutel. Scala-verzamelingen bieden hiervoor declaratieve bewerkingen zoals groupBy, sortBy, sortWith en vergelijkbare bewerkingen.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(5, 3, 8, 1, 9, 2)
println(nums.sorted)
}
}sorted: natuurlijke volgorde
sorted sorteert elementen in hun natuurlijke volgorde (oplopend voor getallen, alfabetisch voor tekenreeksen). Hiervoor is een ordening nodig; die bestaat voor veelgebruikte typen.
object Main {
def main(args: Array[String]): Unit = {
println(List(3, 1, 2).sorted)
println(List("pear", "apple", "fig").sorted)
}
}sortBy: sorteren op een sleutel
sortBy sorteert op een waarde die van elk element wordt afgeleid. Geef een functie op die de sorteersleutel extraheert.
object Main {
def main(args: Array[String]): Unit = {
val words = List("banana", "fig", "apple")
val byLength = words.sortBy(_.length)
println(byLength)
}
}Aflopend sorteren
Als je aflopend wilt sorteren, kun je een numerieke sleutel negatief maken of sorted(Ordering.Int.reverse) gebruiken. Voor afgeleide sleutels is sortBy met een minteken beknopt.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(5, 3, 8, 1)
println(nums.sortBy(-_))
println(nums.sorted(Ordering.Int.reverse))
}
}sortWith: aangepaste vergelijkingsfunctie
sortWith neemt een functie die true teruggeeft wanneer het eerste argument vóór het tweede moet komen. Zo krijg je volledige controle over de ordening.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(5, 3, 8, 1)
val descending = nums.sortWith((a, b) => a > b)
println(descending)
}
}Sorteren op meerdere sleutels
sortBy kan een tuple teruggeven om tegelijk op meerdere sleutels te sorteren: eerst wordt het eerste element vergeleken en daarna het tweede om gelijke waarden te onderscheiden.
object Main {
def main(args: Array[String]): Unit = {
val people = List(("Ann", 30), ("Bob", 25), ("Ann", 22))
val sorted = people.sortBy { case (name, age) => (name, age) }
println(sorted)
}
}groupBy: opdelen in een Map
groupBy geeft een Map terug waarin elke sleutel het resultaat van je functie is en elke waarde de lijst met elementen die die sleutel delen.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val byParity = nums.groupBy(_ % 2 == 0)
println(byParity)
}
}Groeperen op basis van een berekende sleutel
De groeperingssleutel kan van alles zijn: een eerste letter, een lengte of een categorie. Elke verschillende sleutel wordt een eigen groep.
object Main {
def main(args: Array[String]): Unit = {
val words = List("apple", "avocado", "banana", "cherry", "cranberry")
val byFirstLetter = words.groupBy(_.head)
byFirstLetter.foreach { case (letter, ws) => println(s"$letter -> $ws") }
}
}Groepen transformeren
Na het groeperen wil je vaak elke groep samenvatten. Gebruik view.mapValues (of map) om de waarden te transformeren, bijvoorbeeld om het aantal elementen per groep te tellen.
object Main {
def main(args: Array[String]): Unit = {
val words = List("cat", "car", "dog", "deer", "cow")
val counts = words.groupBy(_.head).view.mapValues(_.size).toMap
println(counts)
}
}groupMapReduce in één stap
groupMapReduce groepeert, transformeert elk element en reduceert de waarden van elke groep, allemaal in één doorgang. Het is een beknopte manier om samenvattingen op te bouwen, zoals totalen per categorie.
object Main {
def main(args: Array[String]): Unit = {
val sales = List(("books", 10), ("toys", 5), ("books", 7), ("toys", 3))
val totals = sales.groupMapReduce(_._1)(_._2)(_ + _)
println(totals)
}
}Groeperen en sorteren combineren
Een veelgebruikt patroon: groepeer gegevens, vat elke groep samen en sorteer daarna de samenvatting. Hier tellen we woorden per eerste letter en sorteren we op aantal.
object Main {
def main(args: Array[String]): Unit = {
val words = List("apple", "avocado", "banana", "cherry", "cranberry", "apricot")
val ranked = words
.groupBy(_.head)
.view.mapValues(_.size).toList
.sortBy(-_._2)
println(ranked)
}
}Korte controle
Wat geeft List(1,2,3,4).groupBy(_ % 2 == 0) terug?
Samenvatting
Je hebt groeperen en sorteren geleerd:
sorted— natuurlijke volgordesortBy— sorteren op een afgeleide sleutel (een tuple voor meerdere sleutels)sortWith— aangepaste vergelijkingsfunctiegroupBy— opdelen in eenMapmet groepengroupMapReduce— groeperen, transformeren en reduceren in één doorgang
Leer Scala met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 39
- Lessen
- 143
Veelgestelde vragen
Is de les “Groeperen en sorteren” gratis?
Ja — de volledige tekst van “Groeperen en sorteren” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Scala voor backend-engineering en functioneel programmeren wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Scala voor backend-engineering en functioneel programmeren bevat in totaal 4 lessen.
Wat leer ik in “Groeperen en sorteren”?
groupBy en sortBy Je oefent met Scala voor backend-engineering en functioneel programmeren door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Scala voor backend-engineering en functioneel programmeren te beginnen?
Ervaring vooraf is niet nodig. Scala voor backend-engineering en functioneel programmeren op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Groeperen en sorteren”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Scala voor backend-engineering en functioneel programmeren?
Ja. Elke les over Scala voor backend-engineering en functioneel programmeren bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- List, Vector, Set, Map
- Transformaties
- Folding en reducing
- Groeperen en sorteren