swift - 在不修改原始节点的情况下编写 Dijkstra 算法
问题描述
我有一个使用我选择的语言的 Dijkstra 算法的工作版本 - 在这种情况下是 Swift。
您可能知道,该算法要求您在节点上放置临时标签 - 但是否可以在不更改原始类的情况下实现。作为参考,这里是一个缩减的节点类,但这个问题与语言无关,因为我只想知道如何在不更改原始类的情况下实现它。
class Node: Hashable {
var nodes = [Int:[Int]]()
var children = [Node]()
}
解决方案
一种半hacky的解决方案是使用关联的对象:
fileprivate var labelKey: UInt8 = 0
extension Node {
var label: Int {
get {
return objc_getAssociatedObject(self, &labelKey) as? Int ?? 0
}
set {
objc_setAssociatedObject(self, &labelKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
这样你就不会改变原来的类。
推荐阅读
- azure - 条纹 - Blazor - 天蓝色
- python - 无意中在 matplotlib 中绘制多条线
- python - 保存/加载双端队列
- sql - 从 SAP/Sybase ASE 上的事务中运行 sp_rename 的解决方法(错误 17260)
- lucene - 如果在 Lucene 8.6.1 中未操作索引,docids 是否不变?
- security - Digital Ocean VPC Droplets 无法相互连接
- python - ydl.download 下载但未继续执行代码
- r - 在 ggplot2 的 aes() 中使用组参数
- java - 我将如何更改它以使其发生在所有实体上,而不仅仅是玩家 Minecraft Forge 改装
- visual-studio - 如何在C中使用多SIMD寄存器