Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin · Oppitunti

Ryhmittely ja lajittelu

groupBy ja sortBy.

Oppitunti 4/413 vaihetta

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ärjestys
  • sortBy — järjestäminen johdetun avaimen mukaan (monikko usealle avaimelle)
  • sortWith — mukautettu vertailija
  • groupBy — osiointi ryhmät sisältäväksi Map-rakenteeksi
  • groupMapReduce — ryhmittely, muuntaminen ja pelkistäminen yhdellä läpikäynnillä
Aloita maksutta

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

  1. List, Vector, Set, Map
  2. Muunnokset
  3. Kokoaminen ja redusointi
  4. Ryhmittely ja lajittelu
← Takaisin: Scala backend-kehitykseen ja funktionaaliseen ohjelmointiin