Middle
Kako se porede vrednosti u rečniku u jeziku Swift?
sobes.tech АИ
Одговор од АИ
Za poređenje rečnika u Swift-u koriste se operatori jednakosti == i nejednakosti !=. Porede se parovi ključ-vrednost. Za uspešno poređenje rečnika pomoću operatora == potrebno je da i ključevi i vrednosti rečnika budu u skladu sa protokolom Equatable.
Porede se sledeći aspekti:
- Broj elemenata: Rečnici moraju sadržavati isti broj parova ključ-vrednost.
- Ključevi: Skup ključeva u oba rečnika mora biti isti.
- Vrednosti: Vrednosti povezane sa istim ključevima moraju biti jednake.
Primer poređenja:
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 (različiti ključevi)
let isEqual1_4 = dict1 == dict4 // false (različite vrednosti za ključ "b")
let isNotEqual1_3 = dict1 != dict3 // true
Ako ključevi ili vrednosti rečnika sadrže tipove koji ne implementiraju protokol Equatable, pokušaj poređenja pomoću == će dovesti do greške pri kompilaciji.
Primer poređenja rečnika sa korisničkim tipovima:
struct User {
let id: Int
let name: String
}
struct Product: Equatable {
let id: Int
let name: String
// Implementacija Equatable za Product
static func == (lhs: Product, rhs: Product) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
// Rečnik sa User (ne `Equatable`) - dovodi do greške pri poređenju
// let users1: [Int: User] = [1: User(id: 1, name: "Alice")]
// let users2: [Int: User] = [1: User(id: 1, name: "Alice")]
// let isEqualUsers = users1 == users2 // Greška pri kompilaciji
// Rečnik sa 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
Ako je potrebno porediti rečnike koji sadrže tipove koji nisu Equatable, potrebno je implementirati sopstvenu logiku poređenja, ručno prolazeći kroz elemente rečnika.