到目前为止,我还没有找到一种方法来执行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给出的答案太大而且势在必行。
由于
答案 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