2013-05-14 133 views
2

我写了转换时间戳列表间间隔转换时间戳间间隔

def toIntervals(timestamps: List[String]) = { 
    def helper(timestamps: List[String], accu: List[Long]): List[Long] = { 
     if (timestamps.tail.isEmpty) accu.reverse 
     else { 
     val first = timestamps.head.toLong 
     val second = timestamps.tail.head.toLong 
     val newHead = second - first 
     helper(timestamps.tail, newHead :: accu) 
     } 
    } 
    helper(timestamps, List()) 
    } 

,无尾调用

def toIntervals(timestamps: List[String]) : List[Long] = { 
     if (timestamps.tail.isEmpty) List() 
     else { 
     val first = timestamps.head.toLong 
     val second = timestamps.tail.head.toLong 
     val newHead = second - first 
     newHead :: toIntervals(timestamps.tail) 
     } 
    } 

Scala的功能,但我有一种感觉,有一个一/二衬里它例如map2。有什么建议?

回答

6
(timestamps.tail, timestamps).zipped.map(_.toLong - _.toLong) 

是你的单线;尽管(这会使它成为双线),但它只会更有效率地运行val times = timestamps.map(_.toLong)一次。

1

接受的答案是伟大的,只是想提供一种替代方案:

timetamps.sliding(2).map { case Seq(a,b) => b - a }