2017-09-01 57 views
0
[1.5, 7, 3, 3.1, 3.3, 2.5, 6, 6.5, 5.4, 9, 10, 8] 

如何分组最大差异为2的数字?如何在红宝石中分组附近的数字?

[1.3, 3, 3.1, 3.3, 2.5] 

[6, 6.5, 5.4, 7] 

[8, 9, 10] 
+0

这些在数组中吗? –

+1

'1.3'从哪里来?为什么订单有时会改变,而不是其他时间? 8和9之二是不是7? – engineersmnky

+0

是我在aproximate方法thiniking,但它不适用于此目的 – rakudo2

回答

4

正如通常的情况下,Ruby有该工具:

a = [ 1.5,7,3,3.1,3.3,2.5,6,6.5,5.4,9,10,8 ] 

a.chunk_while do |prev,val| 
    (val - prev).abs <= 2 
end 

a.to_a 
# => [[1.5], [7], [3, 3.1, 3.3, 2.5], [6, 6.5, 5.4], [9, 10, 8]] 

chunk_while该方法采用两个值,前一值和当前值。当该块返回逻辑上错误的值时,它会分裂。

+0

我想你需要在处理chunk_while之前对数组进行排序。 – Mohanraj

+1

@Mohanraj这是一个选项,但目前尚不清楚这是否意图。它们可能处于某种时间顺序。 – tadman

+1

也许附加'.reject(&:one?)'来删除非块。 –