Sobes.tech
Middle

Kaip lyginamos reikšmės Swift kalbos žodyne?

sobes.tech AI

Atsakymas iš AI

Swift'e žodynų palyginimui naudojami lygybės == ir nelygybės != operatoriai. Palyginami raktų-vertės poros. Sėkmingam žodynų palyginimui naudojant == operatorių, būtina, kad ir raktai, ir vertės atitiktų Equatable protokolą.

Palyginami šie aspektai:

  • Elementų skaičius: Žodynai turi turėti tą patį raktų-vertės porų skaičių.
  • Raktai: Abiejų žodynų raktų rinkinys turi sutapti.
  • Vertės: Susietos su tais pačiais raktais vertės turi būti lygios.

Pavyzdys:

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 // tiesa
let isEqual1_3 = dict1 == dict3 // klaidinga (skiriasi raktai)
let isEqual1_4 = dict1 == dict4 // klaidinga (skiriasi reikšmės "b" raktui)
let isNotEqual1_3 = dict1 != dict3 // tiesa

Jei žodynų raktai ar reikšmės turi tipus, kurie neįgyvendina Equatable protokolo, bandymas palyginti == būdu sukels kompiliacijos klaidą.

Pavyzdys, palyginant žodynus su naudotojo tipais:

struct User {
    let id: Int
    let name: String
}

struct Product: Equatable {
    let id: Int
    let name: String

    static func == (lhs: Product, rhs: Product) -> Bool {
        return lhs.id == rhs.id && lhs.name == rhs.name
    }
}

// Žodynas su User (ne `Equatable`) - sukels klaidą
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Klaida

// Žodynas su 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 // tiesa
let isEqualProducts1_3 = products1 == products3 // klaidinga

Jei norite palyginti žodynus, turinčius ne-Equatable tipus, reikės įgyvendinti savo palyginimo logiką, rankiniu būdu pereinant per žodyno elementus.