0Pricing
Scala for Backend Engineering & Functional Programming · บทเรียน

การจัดกลุ่มและการเรียงลำดับ

groupBy และ sortBy

การจัดกลุ่มและการเรียงลำดับ เป็นบทเรียน Scala for Backend Engineering & Functional Programming ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Scala for Backend Engineering & Functional Programming และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

การจัดระเบียบข้อมูล

ข้อมูลในโลกจริงมักต้องจัดกลุ่มตามคุณสมบัติ หรือเรียงลำดับตามคีย์ คอลเลกชันของ Scala มี groupBy, sortBy, sortWith และเครื่องมืออื่น ๆ สำหรับทำงานเหล่านี้ในลักษณะบอกสิ่งที่ต้องการ

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(5, 3, 8, 1, 9, 2)
    println(nums.sorted)
  }
}

sorted: ลำดับธรรมชาติ

sorted เรียงสมาชิกตามลำดับธรรมชาติของสมาชิกนั้น เช่น ตัวเลขเรียงจากน้อยไปมาก และข้อความเรียงตามตัวอักษร ฟังก์ชันนี้ต้องใช้ตัวกำหนดลำดับ ซึ่งมีให้สำหรับชนิดข้อมูลทั่วไป

object Main {
  def main(args: Array[String]): Unit = {
    println(List(3, 1, 2).sorted)
    println(List("pear", "apple", "fig").sorted)
  }
}

sortBy: เรียงตามคีย์

sortBy เรียงตามค่าที่ได้จากสมาชิกแต่ละรายการ ให้ฟังก์ชันที่ดึงคีย์สำหรับการเรียงลำดับออกมา

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("banana", "fig", "apple")
    val byLength = words.sortBy(_.length)
    println(byLength)
  }
}

การเรียงลำดับจากมากไปน้อย

หากต้องการเรียงจากมากไปน้อย ให้เปลี่ยนเครื่องหมายของคีย์ตัวเลข หรือใช้ sorted(Ordering.Int.reverse) สำหรับคีย์ที่คำนวณขึ้นมา sortBy ที่ใช้เครื่องหมายลบเป็นวิธีที่กระชับ

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: ตัวเปรียบเทียบแบบกำหนดเอง

sortWith รับฟังก์ชันที่คืนค่า true เมื่ออาร์กิวเมนต์ตัวแรกควรอยู่ก่อนอาร์กิวเมนต์ตัวที่สอง ทำให้คุณควบคุมลำดับได้อย่างเต็มที่

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)
  }
}

การเรียงลำดับด้วยหลายคีย์

sortBy สามารถคืนค่าเป็นทูเพิลเพื่อเรียงตามหลายคีย์พร้อมกัน โดยจะเปรียบเทียบสมาชิกตัวแรกก่อน แล้วใช้ตัวที่สองเพื่อตัดสินกรณีที่ค่าเท่ากัน

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: แบ่งเป็น Map

groupBy คืนค่าเป็น Map โดยแต่ละคีย์เป็นผลลัพธ์จากฟังก์ชันของคุณ และแต่ละค่าคือรายการของสมาชิกที่มีคีย์นั้นร่วมกัน

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)
  }
}

การจัดกลุ่มตามคีย์ที่คำนวณขึ้น

คีย์สำหรับจัดกลุ่มจะเป็นอะไรก็ได้ เช่น อักษรตัวแรก ความยาว หรือหมวดหมู่ คีย์ที่แตกต่างกันแต่ละคีย์จะกลายเป็นกลุ่มหนึ่งกลุ่ม

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") }
  }
}

การแปลงกลุ่ม

หลังจากจัดกลุ่มแล้ว คุณมักต้องการสรุปผลของแต่ละกลุ่ม ใช้ view.mapValues (หรือ 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 ในขั้นตอนเดียว

groupMapReduce จัดกลุ่ม แปลงสมาชิกแต่ละรายการ และลดรูปค่าของแต่ละกลุ่ม ทั้งหมดนี้ในการประมวลผลครั้งเดียว เป็นวิธีที่กระชับในการสร้างข้อมูลสรุป เช่น ผลรวมแยกตามหมวดหมู่

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)
  }
}

การรวมการจัดกลุ่มและการเรียงลำดับ

รูปแบบที่พบบ่อยคือ จัดกลุ่มข้อมูล สรุปผลของแต่ละกลุ่ม แล้วเรียงลำดับข้อมูลสรุป ในที่นี้เรานับคำตามอักษรตัวแรกแล้วเรียงตามจำนวน

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)
  }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

List(1,2,3,4).groupBy(_ % 2 == 0) คืนค่าอะไร

สรุปทบทวน

คุณได้เรียนรู้การจัดกลุ่มและการเรียงลำดับแล้ว:

  • sorted — ลำดับธรรมชาติ
  • sortBy — เรียงตามคีย์ที่ได้จากสมาชิก (ใช้ทูเพิลสำหรับหลายคีย์)
  • sortWith — ตัวเปรียบเทียบแบบกำหนดเอง
  • groupBy — แบ่งเป็น Map ของกลุ่ม
  • groupMapReduce — จัดกลุ่ม แปลง และลดรูปในการประมวลผลครั้งเดียว

คำถามที่พบบ่อย

บทเรียน “การจัดกลุ่มและการเรียงลำดับ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดกลุ่มและการเรียงลำดับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Scala for Backend Engineering & Functional Programming ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Scala for Backend Engineering & Functional Programming มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดกลุ่มและการเรียงลำดับ”

groupBy และ sortBy คุณปฏิบัติ Scala for Backend Engineering & Functional Programming ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Scala for Backend Engineering & Functional Programming หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Scala for Backend Engineering & Functional Programming บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดกลุ่มและการเรียงลำดับ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Scala for Backend Engineering & Functional Programming นี้ได้ไหม

ได้ บทเรียน Scala for Backend Engineering & Functional Programming ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. List, Vector, Set, Map
  2. การแปลงข้อมูล
  3. การพับและการลดค่า
  4. การจัดกลุ่มและการเรียงลำดับ
← กลับไปที่ Scala for Backend Engineering & Functional Programming