【发布时间】:2020-01-30 21:13:24
【问题描述】:
我有多个包含 n 个属性的元素。我需要创建一个数据结构,它将返回给定条件集的所有匹配元素。查找需要快速。
为了更清楚一点,想象一下下面的类:
class Element {
let a : Int? // criterion0
let b : Int? // criterion1
let c : Int? // criterion2
let value : String
}
现在我用 3,000 个这样的元素填充 dataStructure:
dataStructure.add(Element(a:1,b:3,c:4, value:"val0")) // insert 1
dataStructure.add(Element(a:nil,b:1000,c:40, value:"val1")) // insert 2
dataStructure.add(Element(a:nil,b:3,c:4, value:"val2")) // insert 3
...
dataStructure.add(Element(a:10,b:3,c:23, value:"val2999")) // insert 3000
我将不得不查找可能与我插入的内容完全匹配的元素,但也可能不同。由于通配符 nil,每次查找可能有许多匹配项。我需要这些查找速度快:
dataStructure.getAllMatching(a:4, b:30, c:4)
插入元素中的nil 参数表示任何值都是匹配的。
例如,dataStructure.getAllMatching(a:1, b:3, c:4) 将返回 ["val0", "val1"] 至少考虑到我在上面插入的内容。
请注意,我对内存几乎没有限制,我可以在启动时花一些时间进行设置。只有查找需要快速。
【问题讨论】:
-
我认为应该总是快速过滤 300 个元素,几乎独立于算法。
-
您是否考虑过使用“镜像”协议?如果您的对象继承自此协议,则当您在数组上使用
map函数时,可以轻松快速地循环遍历对象的属性。 developer.apple.com/documentation/swift/mirror -
@JohnAyers 谢谢。这会让它变得容易,但我认为它不会让它很快
-
当您收到这些回复时,我会考虑的是 XCTest 和 XCTestCase 支持测量各种功能运行所需的时间。看看:developer.apple.com/documentation/xctest/xctestcase/…。它测量一段代码运行所需的秒数。
-
谢谢,是的,我看到了。很有用。
标签: swift data-structures