gpt4 book ai didi

Swift:如何使我的自定义结构 Node 符合 Hashable?

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:37 25 4
gpt4 key购买 nike

Node 是一个通用类型。

struct Node<T: Hashable>: Hashable {
var label: T

init(_ label: T) {
self.label = label
}

var hashValue : Int {
get {
return label.hashValue
}
}
}

extension Node : Equatable {}

// MARK: Equatable

func ==<T>(lhs: Node<T>, rhs: Node<T>) -> Bool {
return lhs.label == rhs.label
}

但是当我尝试以下操作时它不起作用:

let nodes = Set<Node<String>>()

编译器提示 Node<String>不符合 Hashable。如何制作Node<String>符合Hashable?

最佳答案

您还必须为您的结构实现 == 方法作为 Equatable 协议(protocol)的一部分:

func ==<T, K>(lhs:Node<T>, rhs:Node<K>) -> Bool {
return lhs.hashValue == rhs.hashValue
}

原因是 Hashable继承自 Equatable .

以下是一个完整的工作场所示例:

struct Node<T: Hashable> : Hashable {
var label: T

init(_ label: T) {
self.label = label
}

var hashValue : Int {
get {
return label.hashValue
}
}
}

func ==<T>(lhs:Node<T>, rhs:Node<T>) -> Bool {
return lhs.hashValue == rhs.hashValue
}

var nodes = Set<Node<String>>()
nodes.insert(Node("hi"))
nodes.insert(Node("ho"))
nodes.insert(Node("hi"))

关于Swift:如何使我的自定义结构 Node<T> 符合 Hashable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34947646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com