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

前端之家收集整理的这篇文章主要介绍了scala – 在开始和结束时间的元组列表中查找空间隔的功能方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个包含开始和结束时间的元组列表:

List((1,10),(2,11),(3,(13,14))

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

我期待以下输出

List((0,1),(11,13))

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

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

解决方法

考虑以下解决方案:

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

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

猜你在找的Scala相关文章