jjzjj

Hashable

全部标签

swift - Swift 中的 Hashable 和 Equatable 有什么用?什么时候使用哪个?

我知道Hashable是继承自Equatable,但是你能举个例子,需要Hashable,而不仅仅是Equatable。谢谢! 最佳答案 您可以使用hashValue来确定两个对象是否不彼此相等。除此之外,您不应该仅根据对象的哈希值对对象进行任何Equatable或Comparable确定。简而言之,Hashable派生自Equatable,因为您无法仅通过测试它们的hashValue平等。更多详情根据Swiftdocumentation:AhashvalueisanIntvaluethatisthesameforallobject

objective-c - NSObject 是 Hashable 但采用 NSObject 的协议(protocol)不是?

在我提交雷达之前与社区进行健全性检查:在.hObj-C文件中:@protocolmyProto@end在.swift文件中(可以通过桥接头访问上述协议(protocol)定义):classmyClass{//ThislinecompilesfinevardictOne:[NSObject:Int]?//Thislinefailswith"Type'myProto'doesnotconformtoprotocol'Hashable'"vardictTwo:[myProto:Int]?}对NSObject类的检查表明它(或它映射到的NSObjectProtocol)没有实现Hashable

hash - 在 Swift 中编写一个好的 Hashable 实现

在Objective-C(和其他语言)中,-(NSUInteger)hash的一个相对较好的默认实现可能是:-(NSUInteger)hash{return31u*[self.property1hash]+[self.property2hash];}假设property1和property2都为hash返回了良好的值。这在Swift的等效varhashValue:Int方法中不起作用,该方法定义在其Hashable协议(protocol)上。等效的Swift代码可能会溢出,这是Swift中的运行时错误。varhashValue:Int{return31*property1.hashVa

ios - 如何在 Swift 中为 Int 数组(自定义字符串结构)实现 Hashable 协议(protocol)

我正在制作一个类似于String的结构,只是它只处理UnicodeUTF-32标量值。因此,它是一个UInt32数组。(有关更多背景信息,请参阅thisquestion。)我想做什么我希望能够使用我的自定义ScalarString结构作为字典中的键。例如:varsuffixDictionary=[ScalarString:ScalarString]()//Unicodekey,renderedglyphvalue//populatedictionarysuffixDictionary[keyScalarString]=valueScalarString//...//checkifdic

java - 为什么Java中没有Hashable接口(interface)

Java中的Object具有hashCode方法,但是,它仅用于关联容器,例如HashSet或HashMap。为什么会这样设计?具有hashCode方法的Hashable接口(interface)看起来是更优雅的解决方案。 最佳答案 在我看来,主要论点是有一个可以为任何Java对象计算的定义良好的默认hashCode,以及同样定义良好的equals。根本没有充分的理由对所有对象保留此功能,当然有很多理由不保留它。所以这在我的书中是显而易见的。 关于java-为什么Java中没有Hasha