Ryhmittely ja lajittelu
groupBy ja sortBy.
Ryhmittely ja lajittelu on ilmainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Tietojen järjestäminen
Käytännön dataa on usein tarpeen ryhmitellä ominaisuuden perusteella tai järjestää avaimen mukaan. Scala-kokoelmat tarjoavat tähän deklaratiiviset toiminnot groupBy, sortBy, sortWith ja muita vastaavia.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(5, 3, 8, 1, 9, 2)
println(nums.sorted)
}
}sorted: luonnollinen järjestys
sorted järjestää alkiot niiden luonnolliseen järjestykseen (luvut nousevasti ja merkkijonot aakkosjärjestykseen). Se tarvitsee järjestyksen määrittävän olion, joka on olemassa yleisille tyypeille.
object Main {
def main(args: Array[String]): Unit = {
println(List(3, 1, 2).sorted)
println(List("pear", "apple", "fig").sorted)
}
}sortBy: järjestäminen avaimen mukaan
sortBy järjestää alkiot jokaisesta alkiosta johdetun arvon perusteella. Antakaa funktio, joka poimii järjestämisavaimen.
object Main {
def main(args: Array[String]): Unit = {
val words = List("banana", "fig", "apple")
val byLength = words.sortBy(_.length)
println(byLength)
}
}Järjestäminen laskevaan järjestykseen
Laskevaan järjestykseen voi järjestää vaihtamalla numeerisen avaimen etumerkin tai käyttämällä toimintoa sorted(Ordering.Int.reverse). Johdettujen avainten kanssa sortBy ja miinusmerkki muodostavat tiiviin ratkaisun.
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: mukautettu vertailija
sortWith ottaa funktion, joka palauttaa true, kun ensimmäisen argumentin kuuluu olla ennen toista. Näin järjestystä voi hallita täysin.
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)
}
}Järjestäminen usean avaimen mukaan
sortBy voi palauttaa monikon, jolloin järjestäminen tapahtuu usean avaimen perusteella kerralla: ensin verrataan ensimmäistä alkiota ja tasatilanteessa toista.
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: osiointi Map-rakenteeksi
groupBy palauttaa Map-rakenteen, jossa jokainen avain on funktion tulos ja jokainen arvo on kyseisen avaimen jakavien alkioiden lista.
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)
}
}Ryhmittely lasketun avaimen perusteella
Ryhmittelyavain voi olla mitä tahansa: ensimmäinen kirjain, pituus tai luokka. Jokaisesta erillisestä avaimesta muodostuu oma ryhmänsä.
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") }
}
}Ryhmien muuntaminen
Ryhmittelyn jälkeen haluatte usein tehdä yhteenvedon kustakin ryhmästä. Muuntakaa arvot esimerkiksi ryhmien alkioiden laskemista varten käyttämällä toimintoa view.mapValues (tai map).
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 yhdellä kertaa
groupMapReduce ryhmittelee, muuntaa jokaisen alkion ja pelkistää kunkin ryhmän arvot yhdellä läpikäynnillä. Se on tiivis tapa muodostaa yhteenvetoja, kuten kategorioittaisia summia.
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)
}
}Ryhmittelyn ja järjestämisen yhdistäminen
Yleinen toimintamalli on ryhmitellä data, tehdä yhteenveto kustakin ryhmästä ja järjestää sitten yhteenveto. Tässä lasketaan sanojen määrä ensimmäisen kirjaimen mukaan ja järjestetään tulos määrän perusteella.
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)
}
}Pikakoe
Mitä List(1,2,3,4).groupBy(_ % 2 == 0) palauttaa?
Kertaus
Opitte ryhmittelemään ja järjestämään:
sorted— luonnollinen järjestyssortBy— järjestäminen johdetun avaimen mukaan (monikko usealle avaimelle)sortWith— mukautettu vertailijagroupBy— osiointi ryhmät sisältäväksiMap-rakenteeksigroupMapReduce— ryhmittely, muuntaminen ja pelkistäminen yhdellä läpikäynnillä
Opi Scala tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 143
Usein kysytyt kysymykset
Onko oppitunti ”Ryhmittely ja lajittelu” ilmainen?
Kyllä – oppitunnin ”Ryhmittely ja lajittelu” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssin, päivitä CoddyKit PROhon. Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Ryhmittely ja lajittelu”?
groupBy ja sortBy. Harjoittelet Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Ryhmittely ja lajittelu”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunnilla?
Kyllä. Jokainen Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- List, Vector, Set, Map
- Muunnokset
- Kokoaminen ja redusointi
- Ryhmittely ja lajittelu