Sobes.tech
Middle

Kā salīdzina vērtības Swift valodas vārdnīcā?

sobes.tech AI

Atbilde no AI

Lietotājvalodās Swift tiek izmantoti vienādojuma operatori == un nevienādojuma operators !=, lai salīdzinātu vārdnīcas. Tiek salīdzinātas atslēgu-vērtību pāri. Lai veiksmīgi salīdzinātu vārdnīcas ar == operatoru, ir nepieciešams, lai gan atslēgas, gan vērtības atbilstu Equatable protokolam.

Tiek salīdzināti šādi aspekti:

  • Elementu skaits: Vārdnīcām jābūt vienādām pēc elementu skaita.
  • Atslēgas: Abās vārdnīcās atslēgu kopas ir jābūt vienādām.
  • Vērtības: Ar vienādām atslēgām saistītās vērtības ir jābūt vienādām.

Piemērs:

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 // patiesa
let isEqual1_3 = dict1 == dict3 // nepatiesa (atšķirīgas atslēgas)
let isEqual1_4 = dict1 == dict4 // nepatiesa (atšķirīgas vērtības "b" atslēgai)
let isNotEqual1_3 = dict1 != dict3 // patiesa

Ja vārdnīcas atslēgas vai vērtības satur tipus, kas neīsteno Equatable protokolu, mēģinājums salīdzināt ar == radīs kompilācijas kļūdu.

Piemērs, salīdzinot vārdnīcas ar lietotāja tipiem:

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

// Vārdnīca ar User (ne `Equatable`) - radīs kļūdu
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Kļūda

// Vārdnīca ar 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 // patiesa
let isEqualProducts1_3 = products1 == products3 // nepatiesa

Ja nepieciešams salīdzināt vārdnīcas ar tipiem, kas nav Equatable, ir jāievieš sava salīdzināšanas loģika, manuāli pārbaudot vārdnīcas elementus.