/** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 9, Mengen und ihre Speicherung * * @author A. Gogol-Döring, Th. Letschert */ import Foundation struct AuD_09_03_Equals01 { /* Structs werden vom Compiler mit der entsprechenden Fuktionalität * ausgestattet */ struct Rabbit : Equatable, Hashable { let name: String let weight: Int init(_ name: String, _ weight: Int) { self.name = name self.weight = weight } } /* Anpassungen sind notwendig, wenn die Gleichheit umdefiniert wird * und darum nicht all Felder bei der Hash-Bildung relevant sind. */ struct RabbitA : Equatable, Hashable { let name: String var weight: Int init(_ name: String, _ weight: Int) { self.name = name self.weight = weight } static func == (lhs: AuD_09_03_Equals01.RabbitA, rhs: AuD_09_03_Equals01.RabbitA) -> Bool { lhs.name == rhs.name } // wer equals sagt muss hash sagen func hash(into hasher: inout Hasher) { hasher.combine(name) } } static let egon1 = Rabbit("Egon", 5) static let egon2 = Rabbit("Egon", 6) static let egon1A = RabbitA("Egon", 5) static let egon2A = RabbitA("Egon", 6) static func run () { print(egon1.hashValue) // unterschiedliche print(egon2.hashValue) // Werte print(egon1 == egon2) // false print(egon1A.hashValue) // gleiche print(egon2A.hashValue) // Werte print(egon1A == egon2A) // true } }