Sobes.tech
Junior — Middle

Ποιοι τύποι δεδομένων ή αντικειμένων μπορούν να λειτουργήσουν ως κλειδιά σε λεξικά ή πίνακες κατακερματισμού;

sobes.tech AI

Απάντηση από AI

Στις λεξικογραφίες (dictionary) ή στους πίνακες κατακερματισμού, τα κλειδιά μπορούν να είναι αντικείμενα που πληρούν τις ακόλουθες απαιτήσεις:

  • Έχουν σωστά υλοποιημένες μεθόδους σύγκρισης ισότητας (equals σε Java, isEqual σε Swift) και υπολογισμού κατακερματισμού (hashCode σε Java).
  • Είναι αμετάβλητα (immutable) ή τουλάχιστον δεν αλλάζουν μετά τη χρήση τους ως κλειδί, για να αποφευχθούν προβλήματα αναζήτησης.

Στο iOS (Swift), τα κλειδιά στους λεξικογράφους (Dictionary) είναι τυπικά τύποι που συμμορφώνονται με το πρωτόκολλο Hashable. Αυτά μπορεί να είναι:

  • Τυπικοί τύποι: String, Int, Double, Bool.
  • Προσαρμοσμένες δομές ή κλάσεις που υλοποιούν το πρωτόκολλο Hashable.

Παράδειγμα:

struct Person: Hashable {
    let id: Int
    let name: String
}

var dict: [Person: String] = [:]
dict[Person(id: 1, name: "Alice")] = "Developer"

Επομένως, τα κλειδιά πρέπει να είναι hashable και αμετάβλητα για τη σωστή λειτουργία του λεξικού.