在开始和结束时间的元组列表中查找空间隔的功能方法

hbo*_*ert 4 functional-programming scala

假设我有一个包含开始和结束时间的元组列表:

List((1,10), (2,11), (3,11), (13,14))
Run Code Online (Sandbox Code Playgroud)

唯一的放松是开始时间是提升的

我期待以下输出:

List((0,1), (11,13))
Run Code Online (Sandbox Code Playgroud)

程序实现相当简单,但我不知道这个(惯用)功能.

scala-for-yield循环似乎不合适,因为结果与输入的大小相同.而减少/折叠会限制我只有一个元组作为答案.

Nya*_*vro 5

考虑以下解决方案:

list
  .foldLeft((List[(Int,Int)](), 0)) {
     case ((res, se), (s, e)) => 
       if(s>se) ((se, s)::res,e) 
       else (res, e)
  }
  ._1
  .reverse
Run Code Online (Sandbox Code Playgroud)

说明.我们累加一对值:空间隔列表(最初为空,List(Int,Int))和最后一个间隔的末尾(最初为0).在每个步骤中取当前间隔(s,e)并将其与最后一个间隔的结束进行比较.如果当前间隔的开始时间大于最后一个,则存在间隙,我们将其结果:(se, s)::res