0Pricing
Kotlin Academy · บทเรียน

การรวมค่า

sum, count, fold, reduce

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

การรวมค่าจากคอลเลกชัน

การรวมค่าจะลดคอลเลกชันให้เหลือค่าเดียว Kotlin มีฟังก์ชันสำเร็จรูปอย่าง sum, count, average, max และฟังก์ชันอเนกประสงค์อย่าง fold และ reduce

sum และ average

sum นำค่าเชิงตัวเลขมาบวกกัน ส่วน average ส่งคืนค่าเฉลี่ยเป็นเลขทศนิยม

fun main() {
    val numbers = listOf(2, 4, 6, 8)
    println("Sum: ${numbers.sum()}")
    println("Average: ${numbers.average()}")
}

การนับ

count ส่งคืนจำนวนองค์ประกอบ โดยสามารถกรองด้วยเงื่อนไขได้หากต้องการ

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    println("Total: ${numbers.count()}")
    println("Even count: ${numbers.count { it % 2 == 0 }}")
}

maxOrNull และ minOrNull

หากต้องการหาค่าสูงสุดหรือต่ำสุดอย่างปลอดภัย ให้ใช้ maxOrNull และ minOrNull ซึ่งจะส่งคืนค่า null เมื่อคอลเลกชันว่าง

fun main() {
    val numbers = listOf(3, 7, 2, 9, 4)
    println("Max: ${numbers.maxOrNull()}")
    println("Min: ${numbers.minOrNull()}")
}

sumOf และ maxByOrNull

sumOf รวมค่าที่เลือกจากแต่ละองค์ประกอบ ส่วน maxByOrNull ค้นหาองค์ประกอบที่มีค่าที่เลือกสูงที่สุด

data class Item(val name: String, val price: Int)

fun main() {
    val items = listOf(Item("a", 10), Item("b", 30), Item("c", 20))
    println("Total price: ${items.sumOf { it.price }}")
    println("Most expensive: ${items.maxByOrNull { it.price }?.name}")
}

ฟังก์ชัน fold

fold รวมองค์ประกอบให้เป็นผลลัพธ์เดียว โดยเริ่มจากค่าเริ่มต้น แลมบ์ดาจะได้รับตัวสะสมที่กำลังคำนวณอยู่และองค์ประกอบปัจจุบัน

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val total = numbers.fold(100) { acc, n -> acc + n }
    println(total)
}

fold สามารถเปลี่ยนชนิดข้อมูลได้

เนื่องจากคุณระบุค่าเริ่มต้นเอง fold จึงสามารถสร้างผลลัพธ์เป็นชนิดข้อมูลใดก็ได้ เช่น สตริง

fun main() {
    val words = listOf("Kotlin", "is", "fun")
    val sentence = words.fold("") { acc, w -> if (acc.isEmpty()) w else "$acc $w" }
    println(sentence)
}

ฟังก์ชันลดค่า

reduce คล้ายกับ fold แต่ใช้องค์ประกอบแรกเป็นตัวสะสมเริ่มต้น ฟังก์ชันนี้จะแจ้งข้อผิดพลาดหากคอลเลกชันว่าง และไม่สามารถเปลี่ยนชนิดข้อมูลได้

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val product = numbers.reduce { acc, n -> acc * n }
    println(product)
}

fold เทียบกับการลดค่า

ความแตกต่างสำคัญมีดังนี้

  • fold รับค่าเริ่มต้น ใช้งานกับคอลเลกชันว่างได้ และส่งคืนชนิดข้อมูลที่ต่างออกไปได้
  • reduce เริ่มจากองค์ประกอบแรก จะล้มเหลวเมื่อคอลเลกชันว่าง และคงชนิดข้อมูลขององค์ประกอบไว้
fun main() {
    val empty = emptyList<Int>()
    println(empty.fold(0) { acc, n -> acc + n })
    println("fold is safe on empty lists")
}

runningFold และ runningReduce

หากคุณต้องการตัวสะสมระหว่างการคำนวณทุกขั้น runningFold (และ runningReduce) จะส่งคืนรายการผลลัพธ์บางส่วนทั้งหมด

fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val sums = numbers.runningFold(0) { acc, n -> acc + n }
    println(sums)
}

การเลือกตัวรวมค่า

ใช้ฟังก์ชันเฉพาะทาง (sum, count, average, maxOrNull) เมื่อเหมาะกับงาน หากต้องการการรวมค่าแบบกำหนดเอง ให้เลือกใช้ fold หรือ reduce โดยควรเลือก fold เมื่อจำเป็นต้องมีค่าเริ่มต้นหรือเปลี่ยนชนิดข้อมูล

ตรวจสอบความเข้าใจ

ความแตกต่างหลักระหว่าง fold กับการลดค่าคืออะไร

สรุปทบทวน

คุณได้เรียนรู้การรวมค่าด้วย sum, count, average, maxOrNull, sumOf รวมถึง fold ซึ่งมีค่าเริ่มต้น รองรับชนิดข้อมูลใดก็ได้ และใช้งานกับคอลเลกชันว่างได้อย่างปลอดภัย และ reduce ซึ่งใช้สมาชิกตัวแรกเป็นค่าเริ่มต้น ต่อไปคุณจะได้สร้างแมปและทำให้คอลเลกชันซ้อนกันกลายเป็นคอลเลกชันแบนราบ

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

บทเรียน “การรวมค่า” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การรวมค่า”

sum, count, fold, reduce คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

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

บทเรียน “การรวมค่า” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

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

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

  1. การกรองและการแมป
  2. การจัดกลุ่มและการแบ่งส่วน
  3. การรวมค่า
  4. การสร้างความสัมพันธ์และการทำให้แบน
← กลับไปที่ Kotlin Academy