如何按gpsCt分组获取Swift数组元素中measVal最大值的元素
我要找的不是数组元素的最小/最大值。
我需要通过比较元素的某一属性与数组中其他所有元素的同一属性来筛选元素。
我确信借助几个内置数组方法(Min/Max)并指定特定的Comparable/Equatable协议就能轻松实现。但数组相关方法在过去40年变化很大,我不知道该如何达成目标。
详细说明...
我有一个JimGyro结构体数组。结构体的其中一个属性gpsCt的值既有变化也有重复,另一个属性measVal的值则各不相同。
我的需求
- 将所有拥有相同
gpsCt值的元素归为一组- 每组元素数量最少1个,最多100个
- 找出该子组中
measVal值最大的元素 - 将这个最大的
measVal值复制到该元素的subGrpMaxVal属性中 - 最后,将该元素复制到一个新数组中
最后两步操作很简单,但我搞不清楚该如何用嵌套循环(for/ForEach/Do While)完成前面的步骤。
提前感谢各位的指点‼️
以下是我的结构体和示例数组:
struct JimGyro { var xGyro: Double var yGyro: Double var zGyro: Double var gpsCt: Int var measVal: Double var subGrpMaxVal: Double } var theArray = [ JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 1, measVal: 2.3, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 1, measVal: 2.4, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 1, measVal: 2.1, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 2, measVal: 1.6, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 2, measVal: 4.7, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 3, measVal: 4.8, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 3, measVal: 9.2, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 3, measVal: 3.4, subGrpMaxVal: 0), JimGyro(xGyro: 0.0235, yGyro: 0.0351, zGyro: 0.0495, gpsCt: 3, measVal: 2.3, subGrpMaxVal: 0), ]
- GPS坐标的读取频率约为每秒1次左右。
- 陀螺仪数据的读取频率约为每秒30次左右。
- (“左右”是因为多种原因,并非每次GPS读取都对应恰好30条陀螺仪数据。)
- 因此我不能简单地按每30个元素为一组来提取数据。
内容的提问来源于stack exchange,提问作者HirsuteJim
相关产品推荐
相关产品推荐

