我的代码按预期工作,我只是想加快速度。
我有一个数据库表,其中包含数百万个传感器测量值。当我查询数据库中过去两个月的测量值(按传感器名称排序)时,我得到大约30万个结果。
然后,我逐步浏览结果,并希望从数据创建嵌套的struct对象。下面是一些较短的伪代码:
struct Measurement {
var date: Int
var temp: Double?
...
}
struct Sensor {
var sensorName: String
var measurements: [Measurement]
}
var sensors:[Sensor] = []
...
for r in dbResults {
...
let m = Measurement(date: r.date, temp: r.temp1, ... )
if let index = sensors.firstIndex(where: { $0.sensorName = r.name }) {
sensors[index].measurements.append(m)
} else {
sensors.append(Sensor(sensorName: r.name, measurements: [m]))
}
}
但是,这相当慢。完成循环大约需要一分钟。有没有办法加快这个过程?我想.firstIndex
花太长时间了。我当时正在考虑在并行线程上创建对象,但是我不确定如何最好地做到这一点,而不会在检查时冒竞争条件的风险.firstIndex
。
谢谢你的任何想法
我将存储改为字典
var sensors:[String: Sensor] = [:]
...
for r in dbResults {
...
let m = Measurement(date: r.date, temp: r.temp1, ... )
sensors[r.name, default: Sensor(sensorName: r.name,
measurements: [])].measurements.append(m)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句