- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
仍在学习 Swift...在为图边设计类时,我想将其抽象并使其成为协议(protocol):
protocol GraphEdge: Hashable {
typealias Vertex
var v1: Vertex {get}
var v2: Vertex {get}
}
(协议(protocol)不能有泛型,所以我使用关联类型)。我想提供一个默认的 ==
运算符,所以我这样实现它:
func ==<E: GraphEdge where E.Vertex: Equatable>(e1: E, e2: E) -> Bool {
return e1.v1 == e2.v1 && e1.v2 == e2.v2
}
它是否正确(从设计的角度来看)?如何以类似的方式实现默认的 hashValue: Int
成员?它不能声明到协议(protocol)本身......
在我目前的实现中,实现协议(protocol)的类也必须实现hashValue: Int
,但这会导致非常重复的代码:
struct Edge<V: Hashable>: GraphEdge {
let v1, v2: V
var hashValue: Int {return v1.hashValue + v2.hashValue}
}
struct WeightedEdge<V: Hashable>: GraphEdge {
let v1, v2: V
let w: Float
var hashValue: Int {return v1.hashValue + v2.hashValue}
}
最佳答案
看起来你的 Vertex 类型符合 Hashable 协议(protocol),所以你可以做..
protocol GraphEdge: Hashable {
typealias Vertex: Hashable
var v1: Vertex {get}
var v2: Vertex {get}
}
extension GraphEdge {
var hashValue: Int {
return v1.hashValue + v2.hashValue
}
}
请注意,将 hasValue 作为两个顶点的哈希值之和返回可能不是理想的解决方案
关于swift - swift : supply default hashValue in a protocol? 中的 api 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383450/
我们发现,如果一个是另一个的负数,则无法通过哈希值来区分两个小数。我们将 Decimals 用作结构中的字段,并且该结构实现了 Hashable 以便能够放入集合中。我们的业务逻辑然后要求所有字段都是
这是 Swift 1.2,我使用的是 Xcode 6.4。以下枚举具有可失败的初始化程序。 enum EstimateItemStatus: Int, Printable { case Pen
由于某种原因,在实现用于其他结构的对象 hashValue 时,程序崩溃了。当我试图获取任何字符串对象的 hashCode 时,它似乎崩溃了。它正在扩展一个结构,但在使用 hashValue 时,
我正在尝试修复 RayWenderlich 网站上不再受支持的旧教程。该警告出现在三个文件中,Chain.swift、Cookie.swift 和 Swap.swift,来自“如何使用 SpriteK
hastable 在对象上使用一些哈希函数来存储。 这个哈希函数本质上是计算对象在表中的位置。 如果我们使用 HashTable 或 HashMap 并且大小不能容纳更多元素,那么这些集合将调整大小以
我不太清楚如何处理编译器发出的不使用 hashValue 而是实现 hash(into:) 的弃用警告。 'Hashable.hashValue' is deprecated as a protoco
我无法理解这一点。 首先我想指出,当我从输入命令行声明这一点时: #define Please 100 #define routine 120 因为“Please”和“routine”具有相同的哈希值
我的 iOS 项目一直面临以下问题(这只是一个警告)。 'Hashable.hashValue' is deprecated as a protocol requirement; conform ty
我最近发现下面的代码以散列冲突告终。 仅供引用,我使用的是 XCode 9.4.1 (9F2000),它使用 Swift 4.1.2 import Foundation let lhs = "あいうえ
在某些情况下和一些代码中,我看到 hashValue 用于将 Bool 转换为 Int。 但是,代码 let someValue = true let someOtherValue = false p
在使用Swift内置的字符串hashValue生成哈希值时,我们发现了两个不同的字符串生成相同哈希值的情况……但是碰撞的原因非常扑朔迷离…… 取这两个字符串: var str1 = """ 00000
我尝试按照本教程进行操作: http://javakart.blogspot.in/2012/12/spring-data-redis-hello-world-example.html 我的问题与此有
我的 iOS 项目一直面临以下问题(这只是一个警告)。 'Hashable.hashValue' is deprecated as a protocol requirement; conform ty
在Swift中为NSObject子类化时,您应该重写哈希还是实现Hashable?此外,你应该重载isEqual:或实现==? 最佳答案 NSObject已经符合所述Hashable协议: exten
如果我有一个字典,例如 { key1 : value1, key2 : value2,..., key17:value17 },并且 2 个键给出相同的散列,比如 key13 和 key5散列时给出
Swift 中的Hashable 协议(protocol)要求您实现一个名为hashValue 的属性: protocol Hashable : Equatable { /// Returns
我有一个“通过 String.hashValue 获取字符串的散列”代码,我在下面添加了它。此代码在 Xcode 9.4.1 中运行良好。 工作良好意味着每当我关闭应用程序并重新打开它时,hashVa
仍在学习 Swift...在为图边设计类时,我想将其抽象并使其成为协议(protocol): protocol GraphEdge: Hashable { typealias Vertex
在 Swift 中子类化 NSObject 时,应该重写 hash 还是实现 Hashable? 此外,您应该重写 isEqual: 还是实现 == 运算符? 最佳答案 NSObject 已经符合 H
Objective-C 中的 .hash 等同于 Swift 中的 .hashValue 吗? 如果不是,Objective-C 中的 .hashValue 是什么? 这与我在这里遇到的一个问题有关(
我是一名优秀的程序员,十分优秀!