Junior — Middle
Swift, hash çakışması durumunda iki nesne arasındaki farkı nasıl belirler?
sobes.tech yapay zeka
AI'dan gelen yanıt
Swift'te, nesneleri karşılaştırmak ve karma çakışmalarını çözmek için isEqual(_:) yöntemi kullanılır. İki nesne aynı hash'e sahipse (çakışma), sistem ek olarak bu yöntemi çağırır ve nesnelerin gerçekten eşit olup olmadığını kontrol eder.
İşlem:
- Nesnenin hash değeri
hash(into:)kullanılarak hesaplanır. - Eğer iki nesnenin hash değeri aynıysa, kesin karşılaştırma için
isEqual(_:)çağrılır. - Eğer
isEqual(_:)truedönerse, nesneler eşit kabul edilir, aksi takdirde farklıdır.
Bu, Set gibi koleksiyonlar veya sözlük anahtarlarıyla, hash çakışmaları olsa bile doğru çalışmayı sağlar.
Uygulama örneği:
class Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
Burada, iki Person nesnesinin hash değeri aynıysa (örneğin, aynı id), final karşılaştırma için == operatörü çağrılır.