Sobes.tech
Middle

Чӣ гуна арзишҳо дар луғат дар забони 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-ро иҷро намекунанд, муқоиса шавад, бояд логикаи муқоисаро худатон иҷро кунед, ки бо дастӣ гузаронидани унсурҳои луғат анҷом дода мешавад.