加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中数组值的功能聚类

发布时间:2020-12-14 04:49:09 所属栏目:百科 来源:网络整理
导读:给定一个数组,如: [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]]. 我想以声明的方式做 – 只是为了更好地掌握更复
给定一个数组,如:

[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]]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读