การจัดกลุ่มและการเรียงลำดับ
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- List, Vector, Set, Map
- การแปลงข้อมูล
- การพับและการลดค่า
- การจัดกลุ่มและการเรียงลำดับ