Swift Academy · Pelajaran

Derivasi Hashable/Equatable/Comparable

Benarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum mudah; laksanakan Comparable tersuai (leksikografi) dan hash(into:) secara manual apabila diperlukan.

Pelajaran 3 daripada 38 langkah

Derivasi Hashable/Equatable/Comparable ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 3. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Apakah yang dijana secara automatik?

Swift boleh menjana secara automatik pematuhan lazim untuk jenis mudah:

  • Kesamaan: kesamaan nilai
  • Boleh dicincang: kunci kamus/set
  • Boleh dikodkan: pengekodan/penyahkodan

Laksanakan Boleh dibandingkan sendiri (secara leksikografi) atau bergantung pada susunan kes enumerasi apabila sesuai.

Penjanaan automatik untuk struktur

Untuk struktur yang sifat tersimpannya mempunyai kesamaan atau boleh dicincang, Swift menjana kedua-duanya secara automatik.

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

Perbandingan untuk enumerasi

Enumerasi tanpa nilai berkaitan boleh menerima penjanaan Boleh dibandingkan berdasarkan susunan kes.

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

Perbandingan untuk struktur

Untuk struktur, tulis < secara manual. Perbandingan leksikografi mudah (akhir, kemudian pertama) ialah pendekatan yang lazim.

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)

Kesamaan dan pencincangan tersuai

Tulis == dan hash(into:) apabila kesamaan/pencincangan perlu mengabaikan pemformatan (contohnya, huruf besar-kecil dan ruang).

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

Amalan terbaik

Petua:

  • Pastikan == dan hash(into:) konsisten: nilai yang sama mesti menghasilkan cincangan yang sama.
  • Utamakan penjanaan automatik dahulu; gunakan cara manual hanya untuk semantik tersuai.
  • Dokumentasikan peraturan susunan untuk Boleh dibandingkan.
  • Gunakan enumerasi tanpa muatan apabila skala tersusun yang mudah sudah memadai.

Senarai semak penjanaan automatik

Semakan ringkas: Apakah yang boleh dijana oleh Swift secara automatik untuk struktur/enumerasi mudah?

Ringkasan

Ringkasan: Biarkan Swift menjana kesamaan/kebolehcincangan (dan kebolehkodkan) untuk model mudah. Laksanakan kebolehbandingan dengan peraturan leksikografi yang jelas atau bergantung pada susunan kes enumerasi apabila boleh.

Percuma untuk bermula

Pelajari Swift dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
122
Pelajaran
409

Soalan Lazim

Adakah pelajaran “Derivasi Hashable/Equatable/Comparable” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Derivasi Hashable/Equatable/Comparable”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 3 pelajaran.

Apakah yang akan saya pelajari dalam “Derivasi Hashable/Equatable/Comparable”?

Benarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum mudah; laksanakan Comparable tersuai (leksikografi) dan hash(into:) secara manual apabila diperlukan. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 3.

Berapa lamakah pelajaran “Derivasi Hashable/Equatable/Comparable” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Lebihan muatan operator dan kumpulan keutamaan
  2. Subskrip dan indeks tersuai sekali lagi
  3. Derivasi Hashable/Equatable/Comparable
← Kembali ke Swift Academy