Dart Academy · บทเรียน

fold, reduce และการขยาย

รวมและทำให้ตัววนซ้ำแบนราบ

บทเรียน 2 จาก 413 ขั้นตอน

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

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

บ่อยครั้งคุณต้องการยุบรายการทั้งชุดให้เหลือค่าเดียว เช่น ผลรวม หรือค่าสูงสุด Dart มี fold และ reduce สำหรับงานนี้โดยเฉพาะ 🧮

ทำความรู้จัก reduce

reduce รวมสมาชิกทีละคู่โดยใช้ฟังก์ชันของคุณ โดยเริ่มจากสมาชิกตัวแรก ดังนั้นรายการต้องไม่ว่าง

var sum = [1, 2, 3, 4].reduce((a, b) => a + b);
print(sum); // 10

reduce พกพาผลลัพธ์ไว้

แต่ละขั้นจะได้รับผลลัพธ์สะสมและสมาชิกถัดไป ให้คิดว่า a คือตัวสะสมที่เพิ่มพูนขึ้นเรื่อย ๆ

var max = [3, 9, 2].reduce((a, b) => a > b ? a : b);
print(max); // 9

กับดักของรายการว่าง

การเรียกใช้ reduce กับรายการว่างจะทำให้เกิด StateError เมื่อรายการอาจว่าง ให้เลือกใช้ fold แทน

ทำความรู้จัก fold

fold คล้าย reduce แต่คุณสามารถกำหนดค่าเริ่มต้นให้ได้ ค่าเริ่มต้นนี้จะกำหนดชนิดของผลลัพธ์และจัดการรายการว่างได้อย่างปลอดภัย

var total = [1, 2, 3].fold(0, (a, b) => a + b);
print(total); // 6

fold เปลี่ยนชนิดได้

เนื่องจากค่าเริ่มต้นเป็นตัวกำหนดชนิด fold จึงสามารถเปลี่ยนรายการ int ให้เป็น String, Map หรือชนิดใด ๆ ที่คุณต้องการได้

var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123

fold ปลอดภัยเมื่อรายการว่าง

เมื่อรายการว่าง fold จะส่งคืนค่าเริ่มต้นโดยตรง ไม่มีข้อขัดข้องและไม่ต้องจำกรณีพิเศษ

var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0

reduce เทียบกับ fold

ใช้ reduce สำหรับการรวมค่าชนิดเดียวอย่างรวดเร็วในรายการที่ไม่ว่าง เลือกใช้ fold เมื่อคุณต้องการค่าเริ่มต้นหรือชนิดผลลัพธ์ใหม่

ทำความรู้จัก expand

expand จะแปลงสมาชิกแต่ละตัวให้เป็น iterable แล้วแผ่ทั้งหมดรวมเป็นสตรีมค่าเดียว เป็นการทำ map แล้วตามด้วยการทำให้แบน

var r = [1, 2].expand((n) => [n, n * 10]);
print(r.toList()); // [1, 10, 2, 20]

ทำรายการซ้อนให้แบน

งานทั่วไปของ expand คือการเปลี่ยนรายการของรายการให้เป็นรายการแบนรายการเดียวด้วยการเรียกใช้ที่กระชับเพียงครั้งเดียว

var flat = [[1, 2], [3, 4]].expand((x) => x);
print(flat.toList()); // [1, 2, 3, 4]

เชื่อมทั้งสามเข้าด้วยกัน

เมธอดเหล่านี้นำมาประกอบกันได้อย่างลงตัว คุณสามารถใช้ expand เพื่อทำให้แบน แล้วใช้ fold เพื่อรวมค่าใน ลำดับการประมวลผลเดียวที่อ่านง่าย

var t = [[1, 2], [3]].expand((x) => x).fold(0, (a, b) => a + b);
print(t); // 6

ตรวจสอบอย่างรวดเร็ว

เลือกเครื่องมือที่เหมาะสมสำหรับการหาผลรวมที่ปลอดภัยเมื่อรายการว่าง

ทบทวน

reduce ใช้รวมค่า, fold ใช้รวมค่าพร้อมค่าเริ่มต้น และ expand ใช้ทำข้อมูลให้แบน ทั้งสามอย่างช่วยรวมค่าจากคอลเลกชันใด ๆ ได้อย่างง่ายดาย 🎉

เริ่มต้นได้ฟรี

เรียนรู้ Dart ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “fold, reduce และการขยาย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “fold, reduce และการขยาย”

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

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

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

บทเรียน “fold, reduce และการขยาย” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ฟังก์ชันลำดับสูงและการทำเคอร์รี
  2. fold, reduce และการขยาย
  3. ตัววนซ้ำแบบขี้เกียจและตัวสร้างด้วย sync*
  4. การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์
← กลับไปที่ Dart Academy