给定一个数组,如:
[0,0.5,0.51,1.0,1.5,1.99,2.0,2.1,2.5,3.0]
我想基于它们的顺序差异将值聚集到子阵列中(例如,其中abs(x-y)< n,并且n = 0.2),例如:
[[0],[0.5,0.51],[1.0],[1.5],[1.99,2.1],[2.5],[3.0]].
我想以声明的方式做 – 只是为了更好地掌握更复杂的序列操作如何在功能上下文中工作(似乎大多数“功能性Swift”演示/教程都非常基本).
提前致谢.
更新:
这是一个有点接近的单线:
let times = [0,0.99,1,1.01,2,2.51,3,3.49,3.5] let result = times.map { t1 in return times.filter { fabs($0 - t1) < 0.2 } } // [[0.0],[0.5],[0.99,1.01],[2.0],[2.5,2.51],[3.0],[3.49,3.5],3.5]]
只需要摆脱重复.
解决方法
带累积参数的简单折叠有效.顺便说一下,不确定这是不是你想要的,因为我不明白你的数组中的元素是否需要随后.在你说明中你这么说,但是你的’样本答案’没有考虑它们是否是后续的.你应该改进问题描述.
let a : [Double] = [0,3.0]; let diff : Double = 0.2; let eps = 0.0000001 let b = a.sort().reduce(([],[])) { (ps : ([Double],[[Double]]),c : Double) -> ([Double],[[Double]]) in if ps.0.count == 0 || abs(ps.0.first! - c) - diff <= eps { return (ps.0 + [c],ps.1) } else { return ([c],ps.1 + [ps.0]) } } let result = b.1 + [b.0]; print(result)
返回
[[0.0],[3.0]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。