Sobes.tech
Middle

Wie werden die Werte in einem Dictionary in Swift verglichen?

sobes.tech KI

Antwort von AI

Zum Vergleichen von Dictionaries in Swift werden die Gleichheitsoperatoren == und != verwendet. Es werden Schlüssel-Wert-Paare verglichen. Damit der Vergleich mit == erfolgreich ist, müssen sowohl die Schlüssel als auch die Werte des Dictionaries das Protokoll Equatable erfüllen.

Folgende Aspekte werden verglichen:

  • Anzahl der Elemente: Die Dictionaries müssen die gleiche Anzahl an Schlüssel-Wert-Paaren enthalten.
  • Schlüssel: Der Satz der Schlüssel in beiden Dictionaries muss übereinstimmen.
  • Werte: Die mit denselben Schlüsseln verbundenen Werte müssen gleich sein.

Beispiel für den Vergleich:

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 (unterschiedliche Schlüssel)
let isEqual1_4 = dict1 == dict4 // false (unterschiedliche Werte für "b")
let isNotEqual1_3 = dict1 != dict3 // true

Wenn Schlüssel oder Werte des Dictionaries Typen enthalten, die das Protokoll Equatable nicht implementieren, führt der Versuch, sie mit == zu vergleichen, zu einem Kompilierungsfehler.

Beispiel für den Vergleich von Dictionaries mit benutzerdefinierten Typen:

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

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

    // Implementierung von `Equatable` für `Product`
    static func == (lhs: Product, rhs: Product) -> Bool {
        return lhs.id == rhs.id && lhs.name == rhs.name
    }
}

// Dictionary mit User (nicht `Equatable`) - führt zu einem Kompilierungsfehler beim Vergleich
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Kompilierungsfehler

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

Wenn Sie Dictionaries mit Typen vergleichen möchten, die nicht Equatable sind, müssen Sie eine eigene Vergleichslogik implementieren, indem Sie die Elemente des Dictionaries manuell durchgehen.