Gruppering og sortering
groupBy og sortBy
Gruppering og sortering er en gratis leksjon i Scala for backendutvikling og funksjonell programmering på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Scala for backendutvikling og funksjonell programmering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.
Organisere data
Data fra virkeligheten må ofte grupperes etter en egenskap eller sorteres etter en nøkkel. Scala-samlinger tilbyr groupBy, sortBy, sortWith og lignende for å gjøre dette deklarativt.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(5, 3, 8, 1, 9, 2)
println(nums.sorted)
}
}sorted: naturlig rekkefølge
sorted sorterer elementer i deres naturlige rekkefølge (stigende for tall, alfabetisk for strenger). Den trenger en ordning, som finnes for vanlige typer.
object Main {
def main(args: Array[String]): Unit = {
println(List(3, 1, 2).sorted)
println(List("pear", "apple", "fig").sorted)
}
}sortBy: sorter etter en nøkkel
sortBy sorterer etter en verdi som er avledet fra hvert element. Oppgi en funksjon som henter ut sorteringsnøkkelen.
object Main {
def main(args: Array[String]): Unit = {
val words = List("banana", "fig", "apple")
val byLength = words.sortBy(_.length)
println(byLength)
}
}Sortere i synkende rekkefølge
For å sortere synkende kan du negere en numerisk nøkkel eller bruke sorted(Ordering.Int.reverse). For avledede nøkler er sortBy med et minustegn en kortfattet løsning.
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: egendefinert sammenligning
sortWith tar en funksjon som returnerer true når det første argumentet skal komme før det andre, slik at du får full kontroll over rekkefølgen.
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)
}
}Sortere etter flere nøkler
sortBy kan returnere en tuple for å sortere etter flere nøkler samtidig: Den sammenligner det første elementet, og deretter det andre for å avgjøre likheter.
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: del opp i en Map
groupBy returnerer en Map der hver nøkkel er resultatet av funksjonen din, og hver verdi er listen over elementene som deler denne nøkkelen.
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)
}
}Gruppere etter en beregnet nøkkel
Grupperingsnøkkelen kan være hva som helst: en første bokstav, en lengde eller en kategori. Hver unike nøkkel blir en gruppe.
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") }
}
}Transformere grupper
Etter gruppering vil du ofte oppsummere hver gruppe. Bruk view.mapValues (eller map) til å transformere verdiene, for eksempel for å telle elementer per gruppe.
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 i ett trinn
groupMapReduce grupperer, mapper hvert element og reduserer verdiene i hver gruppe, alt i én gjennomgang. Det er en kortfattet måte å bygge oppsummeringer på, for eksempel summer per kategori.
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)
}
}Kombinere gruppering og sortering
Et vanlig mønster er å gruppere data, oppsummere hver gruppe og deretter sortere oppsummeringen. Her teller vi ord per første bokstav og sorterer etter antall.
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)
}
}Kort kontroll
Hva returnerer List(1,2,3,4).groupBy(_ % 2 == 0)?
Oppsummering
De har lært gruppering og sortering:
sorted— naturlig rekkefølgesortBy— sorter etter en avledet nøkkel (tuple for flere nøkler)sortWith— egendefinert sammenligninggroupBy— del opp i enMapmed gruppergroupMapReduce— grupper, mapper og reduserer i én gjennomgang
Lær deg Scala med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 39
- Leksjoner
- 143
Ofte stilte spørsmål
Er leksjonen «Gruppering og sortering» gratis?
Ja – hele teksten i «Gruppering og sortering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Scala for backendutvikling og funksjonell programmering-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Scala for backendutvikling og funksjonell programmering inneholder totalt 4 leksjoner.
Hva lærer jeg i «Gruppering og sortering»?
groupBy og sortBy Du øver på Scala for backendutvikling og funksjonell programmering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Scala for backendutvikling og funksjonell programmering?
Ingen tidligere erfaring er nødvendig. Scala for backendutvikling og funksjonell programmering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Gruppering og sortering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Scala for backendutvikling og funksjonell programmering-leksjonen?
Ja. Alle Scala for backendutvikling og funksjonell programmering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- List, Vector, Set, Map
- Transformasjoner
- Folding og reduksjon
- Gruppering og sortering