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 και αμετάβλητα για τη σωστή λειτουργία του λεξικού.