加快嵌套结构的创建

约瑟夫

我的代码按预期工作,我只是想加快速度。

我有一个数据库表,其中包含数百万个传感器测量值。当我查询数据库中过去两个月的测量值(按传感器名称排序)时,我得到大约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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章