2017-10-19 34 views
0

Existe-t-il un moyen élégant de grouper un tableau d'entiers à un tableau de plage dans Ruby?Ruby tableau entier de tableau à plage de plage

range1 = [*39..45] 
#=> [39, 40, 41, 42, 43, 44, 45] 

range2 = [*49..52] 
#=> [49, 50, 51, 52] 

range = range1 + range2 
#=> [39, 40, 41, 42, 43, 44, 45, 49, 50, 51, 52] 

range.build_ranges 
#=> [39..45, 49..52] 
+0

également ici: https://stackoverflow.com/questions/23840815/grouping-consecutive-numbers-in-an-array – tokland

Répondre

1

Oui.

Étant donné que le tableau d'origine est déjà triée et uniqued:

[39, 40, 41, 42, 43, 44, 45, 49, 50, 51, 52] 
.chunk_while{|i, j| i.next == j} 
.map{|a| a.first..a.last} 
# => [39..45, 49..52]