Sobes.tech
Middle

Kuidas võrreldakse väärtusi Swift keele sõnastikus?

sobes.tech AI

Vastus AI-lt

Swiftis kasutatakse sõnastike võrdlemiseks võrdus- == ja mittevõrdus- != operaatorit. Võrreldakse võtme-väärtuse paare. Edukaks sõnastike võrdlemiseks == operaatoriga peab nii võtmed kui ka väärtused vastama Equatable protokollile.

Võrreldakse järgmisi aspekte:

  • Elementide arv: Sõnastikud peavad sisaldama sama arvu võtme-väärtuse paare.
  • Võtmed: Mõlema sõnastiku võtmete kogum peab kattuma.
  • Väärtused: Samade võtmetega seotud väärtused peavad olema võrdsed.

Näide:

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 // tõene
let isEqual1_3 = dict1 == dict3 // väär (erinevad võtmed)
let isEqual1_4 = dict1 == dict4 // väär (erinevad väärtused "b" võtme jaoks)
let isNotEqual1_3 = dict1 != dict3 // tõene

Kui sõnastiku võtmed või väärtused sisaldavad tüüpe, mis ei rakenda Equatable protokolli, põhjustab == kasutamine kompileerimisvea.

Näide sõnastike võrdlemisest kasutaja tüüpidega:

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
    }
}

// Sõnastik User-idega (mitte `Equatable`) - põhjustab vea
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Viga

// Sõnastik Product-idega (`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 // tõene
let isEqualProducts1_3 = products1 == products3 // väär

Kui soovite võrrelda Equatable-i mitte-tüüpe sisaldavaid sõnastikke, peate ise kirjutama võrdlusloogika, läbides sõnastiku elemendid käsitsi.