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

การสร้าง Hashable/Equatable/Comparable

ให้ Swift synthesize Equatable/Hashable (และ Codable) สำหรับโครงสร้าง/เอนัมแบบง่าย ใช้ Comparable แบบกำหนดเอง (เรียงตามลำดับพจนานุกรม) และ hash(into:) แบบเขียนเองเมื่อจำเป็น

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

สิ่งใดถูกสร้างโดยอัตโนมัติ

Swift สามารถสร้างการสอดคล้องตามโปรโตคอลที่ใช้บ่อยให้กับชนิดข้อมูลแบบง่ายได้:

  • Equatable: ความเท่ากันของค่า
  • Hashable: คีย์ของพจนานุกรมหรือเซต
  • Codable: การเข้ารหัสและถอดรหัส

คุณต้องเขียน Comparable เอง (โดยเปรียบเทียบตามลำดับพจนานุกรม) หรืออาศัยลำดับของเคส enum เมื่อเหมาะสม

การสร้างอัตโนมัติสำหรับโครงสร้าง

สำหรับโครงสร้างที่คุณสมบัติซึ่งจัดเก็บไว้มี Equatable/Hashable, Swift จะสร้างทั้งสองอย่างให้โดยอัตโนมัติ

struct Point: Equatable, Hashable {
    var x: Int
    var y: Int
    // No extra code: Equatable & Hashable are synthesized
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
print(p1 == p2)                 // true
let set: Set<Point> = [p1, p2]  // Hashable works; duplicates coalesce
print(set.count)                // 1

Comparable สำหรับ enum

enum ที่ไม่มีค่าที่เชื่อมโยงสามารถได้รับการสร้าง Comparable โดยอิงตามลำดับของเคสได้

enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high)  // true

Comparable สำหรับโครงสร้าง

สำหรับโครงสร้าง ให้เขียน < ด้วยตนเอง การเปรียบเทียบแบบตามลำดับพจนานุกรมอย่างง่าย (last แล้วจึง first) เป็นรูปแบบที่ใช้กันทั่วไป

struct Person: Comparable, Hashable {
    let last: String
    let first: String
    static func < (lhs: Person, rhs: Person) -> Bool {
        if lhs.last != rhs.last { return lhs.last < rhs.last }
        return lhs.first < rhs.first
    }
}
let a = Person(last: "Doe", first: "Ana")
let b = Person(last: "Doe", first: "Max")
print(a < b)   // true (Ana before Max)

การเท่ากันและการแฮชแบบกำหนดเอง

เขียน == และ hash(into:) เมื่อการตรวจสอบความเท่ากันหรือค่าแฮชควรละเว้นรูปแบบการเขียน (เช่น ตัวพิมพ์เล็กใหญ่และช่องว่าง)

struct FileID: Hashable, Equatable {
    let path: String
    // Normalize case/trim when hashing & comparing
    static func == (l: FileID, r: FileID) -> Bool {
        l.path.lowercased().trimmingCharacters(in: .whitespaces) ==
        r.path.lowercased().trimmingCharacters(in: .whitespaces)
    }
    func hash(into hasher: inout Hasher) {
        hasher.combine(path.lowercased().trimmingCharacters(in: .whitespaces))
    }
}
let f1 = FileID(path: " Readme.md ")
let f2 = FileID(path: "readme.md")
print(f1 == f2)                 // true
print(Set([f1, f2]).count)      // 1

แนวทางปฏิบัติที่ดี

เคล็ดลับ:

  • ทำให้ == และ hash(into:) สอดคล้องกัน: ค่าที่เท่ากันต้องมีค่าแฮชเท่ากัน
  • เลือกใช้การสร้างอัตโนมัติก่อน และเขียนเองเฉพาะเมื่อมีความหมายแบบกำหนดเอง
  • เขียนเอกสารอธิบายกฎการจัดลำดับสำหรับ Comparable
  • ใช้ enum ที่ไม่มีข้อมูลประกอบเมื่อมาตรวัดแบบมีลำดับอย่างง่ายเหมาะสม

รายการตรวจสอบการสร้างอัตโนมัติ

ตรวจสอบอย่างรวดเร็ว: Swift สามารถสร้างสิ่งใดให้กับโครงสร้างหรือ enum แบบง่ายได้โดยอัตโนมัติ

สรุป

สรุป: ให้ Swift สร้าง Equatable/Hashable (รวมถึง Codable) ให้กับแบบจำลองอย่างง่ายโดยอัตโนมัติ ใช้ Comparable พร้อมกฎการเปรียบเทียบตามลำดับพจนานุกรมที่ชัดเจน หรืออาศัยลำดับของเคส enum เมื่อทำได้

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

บทเรียน “การสร้าง Hashable/Equatable/Comparable” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การสร้าง Hashable/Equatable/Comparable”

ให้ Swift synthesize Equatable/Hashable (และ Codable) สำหรับโครงสร้าง/เอนัมแบบง่าย ใช้ Comparable แบบกำหนดเอง (เรียงตามลำดับพจนานุกรม) และ hash(into:) แบบเขียนเองเมื่อจำเป็น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การสร้าง Hashable/Equatable/Comparable” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การโอเวอร์โหลดตัวดำเนินการและกลุ่มลำดับความสำคัญ
  2. ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง
  3. การสร้าง Hashable/Equatable/Comparable
← กลับไปที่ Swift Academy