Sobes.tech
Junior — Middle

Чӣ тавр бояд таъмин карда шавад, ки объекти синф ҳамчун калид дар луғат истифода шавад?

sobes.tech AI

Ҷавоб аз AI

Барои истифодаи объекти синф ҳамчун калид дар луғат (масалан, дар Swift Dictionary ё NSDictionary), бояд таъмин кард:

  1. Ҳешшавандагӣ — объект бояд як усули ҳеши дуруст амалӣ карда дошта бошад (hash дар Swift, hashValue дар Objective-C), то ки луғат метавонад калидро зуд пайдо кунад.

  2. Мувофиқати баробарӣ — объект бояд усули муқоисаи дуруст амалӣ кунад (Equatable дар Swift, isEqual: дар Objective-C), то ки луғат метавонад муайян кунад, ки ду калид баробар ҳастанд.

Дар Swift, ин маъно дорад, ки синф бояд ба протоколҳои Hashable ва Equatable мувофиқат кунад. Масалан:

class Person: Hashable {
    var id: Int
    var name: String

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

var dict: [Person: String] = [:]
dict[Person(id: 1, name: "Alice")] = "Developer"

Бе иҷрои дурустии ин усулҳо, объект наметавонад ҳамчун калид дар луғат истифода шавад.