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

ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ

พัฒนาตัววนซ้ำ/ลำดับแบบกำหนดเองให้มีประสิทธิภาพ โดยทำงานผ่านได้รอบเดียว หลีกเลี่ยงการจัดสรรหน่วยความจำเพิ่มเติม และใช้มุมมองแบบ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ลำดับชั้น Sequence/Collection
  2. Map/Filter/Reduce และลำดับแบบ lazy
  3. ตัววนซ้ำแบบกำหนดเองและเคล็ดลับด้านประสิทธิภาพ
← กลับไปที่ Swift Academy