Tag: Hashvalue

iOS协议:可哈希

在上一篇文章中,我们讨论了相等和可比较的协议,我们将研究另一个更快的协议,即Hashable。 Hashable是一种协议,它提供了使用自定义类的对象作为Dictionary或set中的键的功能,按照APPLE定义的可哈希值: 提供整数哈希值的类型。 许多内置类型提供哈希值,或者我会说它们符合哈希协议,包括字符串,整数,浮点数和布尔值,甚至是集合。 注意: 当您定义一个没有关联值的枚举时,它会 自动 获得可 Hashable 一致性。 如果您使用Hashable协议使一个类符合并且该类的实例相等,即a == b,则a.hashvalue == b.hashvalue也将适用,但相反情况并非如此。 按照苹果: 哈希值不能保证在程序的不同执行中相等。 不要保存哈希值以供将来执行。 哈希协议是从等同协议继承而来的,因此您需要同时遵守这两个协议。 让我们借助示例来了解事物:- 我们将使用rollNumber创建一个名为“ Student”的快捷类。 现在我们需要添加可哈希的 弹出有关可哈希和等值一致性的错误。我们将重写“ ==”运算符以实现等值一致性,并提供hashValue,hashValue应该是计算属性,但在示例中作为实验,我们将其用作存储属性。 班级学生:适用于{ var hashValue:Int = 0静态函数==(lhs:学生,rhs:学生)-> Bool {如果lhs.rollNumber == rhs.rollNumber {返回true}返回false} let rollNumber:Int init(rollnumber:Int = 0 ){self.rollNumber = rollnumber}} 现在,如果我们创建此Student类的实例并将其用作哈希值,则可以查看结果。 让lovekesh:Student = Student(rollnumber:1)var studentInfo:Dictionary =字典() 在这里,我们创建了一个名为hashpValue值为0,rollnumber为1的Student实例“ Lovekesh”,并以Student为键声明了StudentInfo字典。 studentInfo [lovekesh] =“第十标准” 打印(studentInfo […]