Sobes.tech
Middle

Hoe worden de waarden in een woordenboek in Swift vergeleken?

sobes.tech AI

Antwoord van AI

Om dictionaries in Swift te vergelijken, worden de gelijkheidsoperatoren == en != gebruikt. Er worden paren sleutel-waarde vergeleken. Voor een succesvolle vergelijking met == moeten zowel de sleutels als de waarden van de dictionary voldoen aan het protocol Equatable.

De volgende aspecten worden vergeleken:

  • Aantal elementen: De dictionaries moeten hetzelfde aantal sleutel-waardeparen bevatten.
  • Sleutels: De set sleutels in beide dictionaries moet overeenkomen.
  • Waarden: De waarden die aan dezelfde sleutels zijn gekoppeld, moeten gelijk zijn.

Voorbeeld van vergelijking:

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 (verschillende sleutels)
let isEqual1_4 = dict1 == dict4 // false (verschillende waarden voor "b")
let isNotEqual1_3 = dict1 != dict3 // true

Als de sleutels of waarden van de dictionary typen bevatten die niet voldoen aan Equatable, zal een poging om ze te vergelijken met == een compileerfout veroorzaken.

Voorbeelden van vergelijking van dictionaries met aangepaste typen:

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

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

    // Implementatie van `Equatable` voor `Product`
    static func == (lhs: Product, rhs: Product) -> Bool {
        return lhs.id == rhs.id && lhs.name == rhs.name
    }
}

// Dictionary met User (geen `Equatable`) - leidt tot compileerfout bij vergelijking
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Fout

// Dictionary met 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

Als u dictionaries wilt vergelijken die niet Equatable-typen bevatten, moet u een aangepaste vergelijkingslogica implementeren, waarbij u handmatig door de elementen van de dictionary loopt.