jjzjj

hashable

全部标签

Swift,如何实现基于对象引用的Hashable协议(protocol)?

我在Java之后开始学习Swift。在Java中,我可以使用任何对象作为HashSet的键,因为它具有基于对象标识符的默认hashCode和equals。如何在Swift中实现相同的行为? 最佳答案 如果您使用的是类而不是结构,您可以使用ObjectIdentifier结构。请注意,您还必须为您的类定义==以符合Equatable(Hashable需要它)。它看起来像这样:classMyClass:Hashable{}func==(lhs:MyClass,rhs:MyClass)->Bool{returnObjectIdentifi

ios - Swift 3 中的 Any 、 Hashable 、 AnyHashable 有什么区别?

我通过大量教程摸索着理解上述3个术语之间的区别,并找到了新术语typeerasedcontainer,现在它让我感到困惑。这引发了很多问题。为什么Swift引入AnyHashable?这3个术语之间的根本区别是什么?Any和AnyHashable的区别?Hashable和AnyHashable的区别?什么时候使用Hashable,什么时候使用AnyHashable?最后但也是最令人困惑的是,在AnyHashable的上下文中,typeerased术语的含义是什么?作为上下文,我遵循了SwiftEvolutionProposalSE-0131. 最佳答案

ios - Swift 3 中的 Any 、 Hashable 、 AnyHashable 有什么区别?

我通过大量教程摸索着理解上述3个术语之间的区别,并找到了新术语typeerasedcontainer,现在它让我感到困惑。这引发了很多问题。为什么Swift引入AnyHashable?这3个术语之间的根本区别是什么?Any和AnyHashable的区别?Hashable和AnyHashable的区别?什么时候使用Hashable,什么时候使用AnyHashable?最后但也是最令人困惑的是,在AnyHashable的上下文中,typeerased术语的含义是什么?作为上下文,我遵循了SwiftEvolutionProposalSE-0131. 最佳答案

generics - 为什么泛型不能编译?

我正在尝试使用泛型实现以下结构。遇到编译器错误,无法找出原因。classTranslator{...}classFooTranslator:Translator{...}想法是Translator使用T作为字典中键的类型。这可以是例如一个字符串或一个枚举。子类提供具体字典。但它失败了,因为:“类型‘String’不符合协议(protocol)‘Hashable’”但是String符合Hashable。它也不适用于同样符合Hashable的Int。如果我删除类型约束,只是为了测试(我还必须禁用字典,因为我不能使用任何不可散列的东西作为那里的键)-它编译classTranslator{..

generics - 为什么泛型不能编译?

我正在尝试使用泛型实现以下结构。遇到编译器错误,无法找出原因。classTranslator{...}classFooTranslator:Translator{...}想法是Translator使用T作为字典中键的类型。这可以是例如一个字符串或一个枚举。子类提供具体字典。但它失败了,因为:“类型‘String’不符合协议(protocol)‘Hashable’”但是String符合Hashable。它也不适用于同样符合Hashable的Int。如果我删除类型约束,只是为了测试(我还必须禁用字典,因为我不能使用任何不可散列的东西作为那里的键)-它编译classTranslator{..

swift - 使结构可哈希?

我正在尝试创建类型为[petInfo:UIImage]()的字典,但出现错误Type'petInfo'doesnotconformtoprotocol'Hashable'。我的petInfo结构是这样的:structpetInfo{varpetName:StringvardbName:String}所以我想以某种方式使其可哈希,但它的所有组件都不是整数,而这正是varhashValue:Int所要求的。如果它的字段都不是整数,我怎样才能让它符合协议(protocol)?如果我知道dbName对于此结构的所有出现都是唯一的,我可以使用它吗? 最佳答案

swift - 使结构可哈希?

我正在尝试创建类型为[petInfo:UIImage]()的字典,但出现错误Type'petInfo'doesnotconformtoprotocol'Hashable'。我的petInfo结构是这样的:structpetInfo{varpetName:StringvardbName:String}所以我想以某种方式使其可哈希,但它的所有组件都不是整数,而这正是varhashValue:Int所要求的。如果它的字段都不是整数,我怎样才能让它符合协议(protocol)?如果我知道dbName对于此结构的所有出现都是唯一的,我可以使用它吗? 最佳答案

c++ - 检查类型是否可散列

我想创建一个类型特征,以使用标准库的无序容器的默认实例化检查特定类型是否可散列,因此它是否具有std::hash的有效特化.我认为这将是一个非常有用的功能(例如,在通用代码中使用std::set作为std::unordered_set的故障保护)。所以我想std::hash没有为每种类型定义,开始制作以下SFINAE解决方案:templatestd::true_typehashable_helper(constT&,consttypenamestd::hash::argument_type*=nullptr);templatestd::false_typehashable_helper

c++ - 检查类型是否可散列

我想创建一个类型特征,以使用标准库的无序容器的默认实例化检查特定类型是否可散列,因此它是否具有std::hash的有效特化.我认为这将是一个非常有用的功能(例如,在通用代码中使用std::set作为std::unordered_set的故障保护)。所以我想std::hash没有为每种类型定义,开始制作以下SFINAE解决方案:templatestd::true_typehashable_helper(constT&,consttypenamestd::hash::argument_type*=nullptr);templatestd::false_typehashable_helper

python - 是什么让用户定义的类不可散列?

docs只要定义了__hash__方法和__eq__方法,就说一个类是可散列的。然而:classX(list):#read-onlyinterfaceof`tuple`and`list`shouldbethesame,soreusetuple.__hash____hash__=tuple.__hash__x1=X()s={x1}#TypeError:unhashabletype:'X'是什么让X不可散列?请注意,我必须有相同的列表(就常规相等而言)才能被散列到相同的值;否则,我将violatethisrequirement关于哈希函数:Theonlyrequiredpropertyis