在Scala中有一种很好的方法可以将数字列表转换为范围列表吗?

时间:2016-02-27 18:46:40

标签: scala

到目前为止,我还没有找到一种方法来执行List.range的相反操作:

Scala集合中的现有范围函数:

List.range(1, 4) = [1, 2, 3]

寻找写一种toRanges函数,可以给我以下结果:

List(1,3,4,5,7,8,9).toRanges() = [(1,1), (3,5), (7,9)]

我正试着看看实现它的功能方式是怎样的

如果你研究How to transform a list of numbers into a list of ranges of consecutive numbers给出的答案太大而且势在必行。

由于

1 个答案:

答案 0 :(得分:5)

toRanges功能可能如下所示:

def toRanges(list:List[Int]) = list.foldLeft(List[(Int,Int)]()) {
  case (Nil, i) => (i,i)::Nil
  case ((a,b)::t, i) => if (b+1==i) (a, i)::t else (i,i)::(a,b)::t
}.reverse