- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我知道Hashable是继承自Equatable,但是你能举个例子,需要Hashable,而不仅仅是Equatable。谢谢!
最佳答案
您可以使用 hashValue
来确定两个对象是否不彼此相等。
除此之外,您不应该仅根据对象的哈希值对对象进行任何Equatable
或Comparable
确定。
简而言之,Hashable
派生自 Equatable
,因为您无法仅通过测试它们的 hashValue
平等。
更多详情
根据 Swift documentation :
A hash value is an Int value that is the same for all objects that compare equally, such that if a == b
, it follows that a.hashValue == b.hashValue
.
然而,反之则不然。如果a.hashValue == b.hashValue
,它不遵循a == b
。
虽然有返回唯一
值的完美散列函数,但散列函数可以为两个或多个不同的对象返回相同的hashValue
。这称为哈希冲突。
避免尝试这样做
For Hashable, because you can get a number that represents the object, you can kind of treat the objects as numbers. You can compare the objects: whether it is less than, greater than, or equal to another object, just like you do with numbers:
没有。您正在比较的是(可能发生碰撞的)对象的哈希值,不是对象本身。
- 比较一个哈希值是小于还是大于另一个哈希值对于对象而言是没有意义的。
- 关于相等性,如果哈希函数为对象返回了一个完全唯一的值,它才成立。
除了 Equatable
之外,Hashable
本身的用途非常有限。为了安全起见,您应该始终测试对象本身。
关于swift - Swift 中的 Hashable 和 Equatable 有什么用?什么时候使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34915836/
嗨,我是 Flutter 的新手,我正在尝试了解 block 计时器 In the doc of flutter_bloc我会知道这个构造函数类是什么意思 @immutable abstract cl
更新: 从包含 Swift 4.1 的 Xcode 9.3 开始,数组相等性按预期工作,原始问题中的代码编译没有错误。 但是,请查看已接受的答案,因为它提供了更好、更现代的解决方案。 原题如下: 当我
我收到了一个 100 页的 Latex 文档,其中包含 $$...$$ 之间的所有方程,我需要将它们全部更改为 \begin{equation}...\end{equation} 在 Latex(一些
I have 5 equations and I've to take combination of 3 equations at a time to check if I'm getting
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
我想在 Modelica 中建模一个显式时间相关的微分方程。 说我想建模 Real x(start=1); der(x) = t; 在 Modelica 中。访问时间变量 t 的正确方法是什么? 最佳
我在 Maxima 中有一个微分方程组。我正在尝试绘制解决方案。 diff_eq1: 'diff(p(t),t) = (5/2 + (3^(1/2))/24 - (5/8)*p(t) - ((3^(1
基本上我只想解决k。请注意,等式等于 1.12 import math from sympy import * a = 1.45 b = 4.1 c = 14.0 al = math.log(a, 2
计算日出/日落时如何考虑观察者海拔? 计算任何纬度/经度的日出/设置是没有问题的,但是如何计算海拔而不是海平面???我已经用完了可以尝试的组合,并且花了三天多的时间来寻求帮助 我正在使用 Paul S
有人能给我一个为什么这不起作用的充分理由吗: let a: [Int]? = [1] let b: [Int]? = nil a == b 这将是我提出的(如果不优雅的话)解决方案。但这是微不足道的,
我正在尝试定义一个符合 Equatable 的测试夹具,以便我可以验证采用协议(protocol)的函数是否按预期执行。我尝试了 3 种不同的排列方式。 import XCTest import My
我确实需要将任何等同的结构/类型/对象传递给此 setEquatable 函数。知道如何解决这个问题吗? public func ==(l: [String: String], r: [String:
这个有效: // Conformance to protocol correctly synthesized by compiler struct MyStruct: Equatable { } 这不
我仍在与 Swift 泛型作斗争。今天我发现如果从泛型类调用我的 Equatable 协议(protocol)实现不起作用。 我的模型类: func ==(lhs: Tracking, rhs: Tr
谁能给我一个很好的理由来说明为什么这不起作用: let a: [Int]? = [1] let b: [Int]? = nil a == b 这将是我提出的(如果不雅)解决方案。但这是微不足道的,所以
题目地址:https://leetcode.com/problems/solve-the-equation/description/ 题目描述: Solve a given equation an
我正在尝试像这样解决这个指数方程: my ($l,$r); for (1 .. 100) -> $x { $l = $x * e ** $x; $r = 5 * (e ** $x -
我正在尝试用这段代码求解方程: a = [-0.0008333 -0.025 -0.6667 -20]; length_OnePart = 7.3248; xi = -6.4446; yi = -16
我正在处理一个说要使用这个 16 位循环冗余校验的设备: CCITT CRC-16 with polynomial x^16 + x^12 + x^5 + x^1 我寻找了这种算法的实现,但我确实只找
我在 hackerrank.com 上的“方程”挑战赛的一些测试用例上遇到了问题。这是问题所在:https://www.hackerrank.com/challenges/equations . 我很
我是一名优秀的程序员,十分优秀!