Чӣ гуна арзишҳо дар луғат дар забони Swift муқоиса мешаванд?
sobes.tech AI
Ҷавоб аз AI
Барои муқоиса кардани луғатҳо дар Swift аз операторҳои баробарӣ == ва нобаробарӣ != истифода мешаванд. Ҷуфтҳои калид-арзиш муқоиса мешаванд. Барои муқоисаи муваффақи луғатҳо бо истифода аз оператори == зарур аст, ки ҳам калидҳо ва ҳам арзишҳои луғат ба протоколи Equatable мувофиқат кунанд.
Масъалаҳои зерин муқоиса мешаванд:
- Сони адад: Луғатҳо бояд яксон бошанд, яъне, ки шумораи ҷуфтҳои калид-арзиш баробар бошад.
- Калидҳо: маҷмӯи калидҳо дар ҳар ду луғат бояд яксон бошанд.
- Арзишҳо: арзишҳое, ки бо калидҳои якхела пайваст шудаанд, бояд баробар бошанд.
Масалан, муқоиса:
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 (калидҳо фарқ мекунанд)
let isEqual1_4 = dict1 == dict4 // false (арзишҳо барои калиди "b" фарқ мекунанд)
let isNotEqual1_3 = dict1 != dict3 // true
Агар калидҳо ё арзишҳои луғатҳо намудҳоиеро дарбар гиранд, ки протоколи Equatable-ро иҷро намекунанд, кӯшиши муқоиса бо == хатогии компилятсияро ба вуҷуд меорад.
Масалан, муқоиса кардани луғатҳо бо намудҳои корбарӣ:
struct User {
let id: Int
let name: String
}
struct Product: Equatable {
let id: Int
let name: String
// Иҷрои `Equatable` барои `Product`
static func == (lhs: Product, rhs: Product) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
// Луғат бо `User` (на `Equatable`) - хатогӣ дар муқоиса
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Хатогии компилятсия
// Луғат бо `Product` (`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
Агар лозим ояд, луғатҳое, ки намудҳои Equatable-ро иҷро намекунанд, муқоиса шавад, бояд логикаи муқоисаро худатон иҷро кунед, ки бо дастӣ гузаронидани унсурҳои луғат анҷом дода мешавад.