swift - Swift 4.2 字典无法按键找到值
问题描述
我生成键以通过某些功能为字典选择值。当我比较生成的键和字典中的键的哈希值时,它们是相同的。但是如果我尝试通过生成的键从字典中获取一些东西——我得到了 nil。
let vCoords = verticesFrom(axes: result)
print ("Generated:")
vCoords.forEach {
print($0, $0.hashValue)
}
print ("Stored:")
grid.forEach {
print($0.key, $0.key.hashValue, $0.value.data)
}
let data1 = vCoords.map { grid[$0]?.data }.compactMap{$0}
print ("\nData: \(data1)")
清单是:
Generated:
["x": -100.0, "y": -100.0] 8549935799981594856
["x": -100.0, "y": -50.0] -5857979117386601619
["x": -10.0, "y": -100.0] 5216433118710295311
["x": -10.0, "y": -50.0] 3277190687522282455
Stored:
["x": -100.0, "y": -100.0] 8549935799981594856 [NSCalibratedRGBColorSpace 1 1 1 1]
["x": -100.0, "y": -50.0] -5857979117386601619 [NSCalibratedRGBColorSpace 0.583333 0.583333 0.583333 0.666667]
["x": -10.0, "y": -100.0] 5216433118710295311 [NSCalibratedRGBColorSpace 0.685 0.685 0.685 1]
["x": -10.0, "y": -50.0] 3277190687522282455 [NSCalibratedRGBColorSpace 0 0 1 1]
Data: []
当然,我可以通过网格迭代 vCoords 并比较每个值,但在这种情况下,我不需要 Dictionary 并且算法更慢。有什么问题?
解决方案
您似乎在这里返回了一个字典数组:
let vCoords = verticesFrom(axes: result)
特别是类似的东西(但不是字典,因为它已经符合 Equatable)
[[String: Int]]
[["x": -100.0, "y": -100.0], ["x": -100.0, "y": -50.0].... ]
这是您需要更改的内容,以便获得预期的结果:
如果您还没有为您的
verticesFrom(axes: result)
,
您应该创建一个自定义类并使其符合Equatable
协议:
class CustomCoordinate: Equatable {
var customX: Int
var customY: Int
// ...
public static func == (lhs: CustomCoordinate, rhs: CustomCoordinate) -> Bool {
return lhs.customX == rhs.customX && lhs.customY == rhs.customY
}
}
否则,如果这意味着您的项目中有太多更改并且您需要快速修复:
let data1 = vCoords.map ({ vectCoord -> [String: Int]? in // [String: Int]? or whatever objet you are using
grid.first(where: { (customCoord) -> Bool in
return customCoord["x"] == vectCoord["x"] && customCoord["y"] == vectCoord["y"]
})
}).compactMap{$0}
推荐阅读
- html - 将鼠标悬停在特定链接上时防止 CSS 下划线动画,同时允许它用于其他元素
- aws-lambda - DynamoDB Scan Lambda 函数返回 HTTP 请求或我不理解的内容,但不是项目列表
- .net-core - 使用 Entity Framework Core 使用 Code First 迁移自动添加默认列
- javascript - 如何准备 JSON 以导出到 CSV
- python - 如何连接两个 Tensorflow 数据集?
- java - 无法调用没有参数的公共 javafx.beans.property.LongProperty()
- swift - SwiftUI:无法在 MainView 中将 DetailView 转换为 ZStack 工作
- java - MongoError:Spring Boot 抛出 E11000 重复键错误
- c# - 如何使用c#生成堆溢出错误
- python - Sympy 为涉及 Piecewise 的简单 ODE 提供了不连续解