我正在尝试清除数组中的重复值,我通过“List::MoreUtils uniq/distinct”函数成功地完成了这项工作。
但是,我也想将那些落在给定容差范围内的值计算为重复值,比如 +-5(我认为容差有时也称为“delta”)。
例如,如果 588 是数组中的一个值,但 589 也是如此,因为差异在 5 的容差范围内,则 589 会启动。
如果没有对数组进行一些讨厌/昂贵的交叉检查,有没有一种优雅的方法来做到这一点?
编辑: ikegami 在我的问题中引起了我的注意,我有点难以理解这个问题。不过,我想我已经解决了。
[500,505,510,515,525,900]
如果您尝试匹配整个数组中的值,您应该得到:
[500,510,525,900]
它命中 505,将其视为非唯一,将其从数组中删除,然后由于缺少 505 而将 510 视为新唯一,依此类推。我想这就是我概述我最初问题的方式,但经过反思,它似乎是一个无用且相当随意的数据集。
我真正想要的是以下比赛:
[500,900]
它代表一组彼此相差 5 以内的数字,同时也发现了 900 值的巨大差异。这似乎是比前者更有用的信息,而且似乎 perreal 的回答让我很接近。很抱歉造成混乱,非常感谢 ikegami 和 perreal 强迫我澄清。
编辑 2 更好的匹配是:
[510,900]
510,是所有连续 +-5 值的中位数。
但是,我认识到现在我们严重偏离了我原来的问题,所以我很高兴能回答我的 EDIT 1 澄清。