swift - 如何使用自定义哈希函数创建 Set
问题描述
我想创建一个集合,但我不想使用我已经为我的对象定义的散列函数。有没有办法提供唯一/散列函数?
我有一个对象:
class Foo {
var uuid: UUID
var name: String
var hash: Int {
return uuid.hash
}
}
我的对象是 uuid 唯一的。但我想要一组所有 Foo 唯一的名称。
为此,我知道几个选项:1)使用键作为我选择的唯一键和我的对象的值创建字典,然后调用.values
2)使用内部循环检查键是否已经存在的双 for 循环
我假设 Set 内部正在执行类似于上面的选项 1 的操作,但我想知道是否有特定于 swift 的东西。我总是可以创建一个扩展来使其成为一条线,但这不是我所追求的。
解决方案
class YourClass{
enum HashChoice{
case first
case second
}
var hashChoice : HashChoice = .first
public init(){}
}
extension YourClass : Hashable{
public var hashValue: Int {
switch hashChoice{
case .first:
// your implementation of first hashValue
case .second:
// your implementation of second hasValue
}
}
static func == (lhs: YourClass, rhs: YourClass) -> Bool {
return lhs.hashvalue == rhs.hasValue
}
}
我不知道我的问题是否正确。这对我来说听起来很模棱两可。但如果你想拥有不同的 hashingFunction,就按照我上面展示的去做。
推荐阅读
- bash - 将主机输出与打印消息进行比较
- visual-studio-code - 使用 VSCode 为某些 YAML 字段自定义语法突出显示
- android - Firebase Cloud Functions - 用户登录时触发的功能
- android - 如何对抗 APK 提取器
- java - 是否可以构建除 java 和 c/cpp 之外的 android 应用程序?
- vba - 条件格式 - 如何引用单元格本身?
- assembly - 如何正确使用FDIV?集会
- angular - 有没有办法以百分比指定 ag-grid 列宽?
- angular - Angular Http请求未填充数据
- javascript - 希腊字母未显示在我的网络浏览器页面中