fold, reduce และการขยาย
รวมและทำให้ตัววนซ้ำแบนราบ
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); // 10reduce พกพาผลลัพธ์ไว้
แต่ละขั้นจะได้รับผลลัพธ์สะสมและสมาชิกถัดไป ให้คิดว่า 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); // 6fold เปลี่ยนชนิดได้
เนื่องจากค่าเริ่มต้นเป็นตัวกำหนดชนิด fold จึงสามารถเปลี่ยนรายการ int ให้เป็น String, Map หรือชนิดใด ๆ ที่คุณต้องการได้
var joined = [1, 2, 3].fold('', (a, b) => '$a$b');
print(joined); // 123fold ปลอดภัยเมื่อรายการว่าง
เมื่อรายการว่าง fold จะส่งคืนค่าเริ่มต้นโดยตรง ไม่มีข้อขัดข้องและไม่ต้องจำกรณีพิเศษ
var s = <int>[].fold(0, (a, b) => a + b);
print(s); // 0reduce เทียบกับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ฟังก์ชันลำดับสูงและการทำเคอร์รี
- fold, reduce และการขยาย
- ตัววนซ้ำแบบขี้เกียจและตัวสร้างด้วย sync*
- การประกอบสายส่งผ่านฟังก์ชันบริสุทธิ์