ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ
พัฒนาตัววนซ้ำ/ลำดับแบบกำหนดเองให้มีประสิทธิภาพ โดยทำงานผ่านได้รอบเดียว หลีกเลี่ยงการจัดสรรหน่วยความจำเพิ่มเติม และใช้มุมมองแบบ lazy
ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
ตัววนซ้ำแบบกำหนดเองเบื้องต้น
สร้าง IteratorProtocol และ ลำดับของคุณเอง ตัววนซ้ำมักวนได้ เพียงรอบเดียว และต้องส่งคืน nil เมื่อสิ้นสุด
ตัวอย่าง IteratorProtocol
เขียน next() เพื่อส่งคืนสมาชิกหนึ่งรายการต่อการเรียกหนึ่งครั้งและ เลื่อนสถานะ จากนั้นส่งคืน nil เพื่อจบการทำงาน
struct CountdownIterator: IteratorProtocol {
var current: Int
mutating func next() -> Int? {
guard current >= 0 else { return nil }
defer { current -= 1 } // advance state
return current
}
}
var it = CountdownIterator(current: 3)
while let n = it.next() { print(n, terminator: " ") } // 3 2 1 0
print("")ตัวห่อลำดับ
ลำดับมี makeIterator() ให้ใช้งาน จากนั้นคุณจะใช้ for-in, map, filter และอื่น ๆ ได้
struct Countdown: Sequence {
let start: Int
func makeIterator() -> CountdownIterator {
CountdownIterator(current: start)
}
}
for n in Countdown(start: 5) {
print(n, terminator: " ") // 5 4 3 2 1 0
}
print("")ทางลัดของ AnyIterator
AnyIterator/AnySequence ช่วยให้คุณสร้างตัววนซ้ำได้อย่างรวดเร็วด้วยคลอเชอร์ เหมาะสำหรับตัวสร้างข้อมูลขนาดเล็ก
// Build an iterator from a closure
var i = 1
let anyIt = AnyIterator<Int> {
guard i <= 3 else { return nil }
defer { i += 1 }
return i * 10
}
let numbers = AnySequence(anyIt)
for x in numbers { print(x, terminator: " ") } // 10 20 30
print("")ใช้การประเมินแบบเลื่อนเวลาเพื่อลดงาน
ควรใช้ การประเมินแบบเลื่อนเวลา เมื่อจำเป็นต้องใช้เพียงบางส่วนของกระบวนการประมวลผลต่อเนื่อง ซึ่งช่วยลดการจัดสรรหน่วยความจำและการทำงาน
let big = Array(1...10_000)
// Eager: builds two intermediate arrays
let eager = big.map { $0 * 2 }.filter { $0 % 3 == 0 }
// Lazy: no temporaries; work is done during collection
let lazyView = big.lazy.map { $0 * 2 }.filter { $0 % 3 == 0 }
let result = Array(lazyView.prefix(5)) // only first 5 actually computed
print(result)เคล็ดลับด้านประสิทธิภาพ
เคล็ดลับ:
- ทำให้ตัววนซ้ำเรียบง่าย เลื่อนสถานะและส่งคืน
nilเมื่อสิ้นสุด - ใช้ การประเมินแบบเลื่อนเวลาเพื่อหลีกเลี่ยงอาร์เรย์ตัวกลาง
- จองความจุสำหรับผลลัพธ์เมื่อทราบขนาด (
res.reserveCapacity(n)) - ควรใช้อัลกอริทึมของ คอลเลกชันเมื่อต้องวนซ้ำหลายรอบหรือใช้ดัชนี
กฎของตัววนซ้ำ
ตรวจสอบสั้น ๆ: next() ต้องทำอะไรเมื่อสิ้นสุดการวนซ้ำ
สรุป
สรุป: เขียน IteratorProtocol ขั้นต่ำ ห่อไว้ใน ลำดับ และทำให้กระบวนการประมวลผลต่อเนื่องมีประสิทธิภาพด้วย การประเมินแบบเลื่อนเวลาและการจองพื้นที่ล่วงหน้าเมื่อทำได้
คำถามที่พบบ่อย
บทเรียน “ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ”
พัฒนาตัววนซ้ำ/ลำดับแบบกำหนดเองให้มีประสิทธิภาพ โดยทำงานผ่านได้รอบเดียว หลีกเลี่ยงการจัดสรรหน่วยความจำเพิ่มเติม และใช้มุมมองแบบ lazy คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลำดับชั้น Sequence/Collection
- Map/Filter/Reduce และลำดับแบบ lazy
- ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ