Middle
Swift dilində sözlükdəki dəyərlər necə müqayisə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
Swift-də lüğətləri müqayisə etmək üçün == və != bərabərlik operatorlarından istifadə olunur. Açar-dəyər cütlükləri müqayisə edilir. == operatoru ilə lüğətləri uğurla müqayisə etmək üçün, həm açarlar, həm də dəyərlər Equatable protokoluna uyğun olmalıdır.
Aşağıdakı aspektlər müqayisə edilir:
- Elementlərin sayı: Lüğətlər eyni sayda açar-dəyər cütlüyü içərməlidir.
- Açarlar: Hər iki lüğətdə açarların toplusu uyğun olmalıdır.
- Dəyərlər: Eyni açarlara bağlı dəyərlər bərabər olmalıdır.
Müqayisə nümunəsi:
let dict1: [String: Int] = ["a": 1, "b": 2]
let dict2: [String: Int] = ["a": 1, "b": 2]
let dict3: [String: Int] = ["a": 1, "c": 3]
let dict4: [String: Int] = ["a": 1, "b": 3]
let isEqual1_2 = dict1 == dict2 // true
let isEqual1_3 = dict1 == dict3 // false (fərqli açarlar)
let isEqual1_4 = dict1 == dict4 // false (fərqli dəyərlər "b" açarı üçün)
let isNotEqual1_3 = dict1 != dict3 // true
Əgər lüğətin açarları və ya dəyərləri Equatable protokolunu tətbiq etməyən tiplərdən ibarətdirsə, == ilə müqayisə cəhdləri tərtib xətasına səbəb olacaq.
Xüsusi tiplərlə lüğətlərin müqayisəsi nümunəsi:
struct User {
let id: Int
let name: String
}
struct Product: Equatable {
let id: Int
let name: String
// `Product` üçün `Equatable` tətbiqi
static func == (lhs: Product, rhs: Product) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
// User ilə lüğət (`Equatable` deyil) - müqayisə zamanı tərtib xətası
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Xəta
// Product ilə lüğət (`Equatable`)
let products1: [Int: Product] = [1: Product(id: 1, name: "Apple"), 2: Product(id: 2, name: "Banana")]
let products2: [Int: Product] = [1: Product(id: 1, name: "Apple"), 2: Product(id: 2, name: "Banana")]
let products3: [Int: Product] = [1: Product(id: 1, name: "Apple"), 2: Product(id: 3, name: "Cherry")]
let isEqualProducts1_2 = products1 == products2 // true
let isEqualProducts1_3 = products1 == products3 // false
Əgər Equatable olmayan tipləri ehtiva edən lüğətləri müqayisə etmək istəyirsinizsə, öz xüsusi müqayisə loqikanızı tətbiq etməlisiniz, bu da lüğətin elementlərini əl ilə keçməyi tələb edir.