2015-09-01 27 views
2

我遇到了一个问题,我真的不知道如何以适当的Scala方式来做到这一点。Scala List按日期差异过滤

我有一个对象列表,持有一个日期。我想要做这样的事情:

lists

我要做出选择使用可接受的时间值,如2小时,在列表2个接班人之间。目的是让用户的趋势与某个点相比(如果他在这里显示2次,或者1或15!)。

算法我想象:

  • 让我们保持2分A和B.我们计算出2点之间的时间差,然后评估它是否可以接受与否(> 2小时,可以接受)。
  • 如果不可接受,我们拒绝B,然后新的B是下一个列表元素。
  • 如果可以接受,则B变成A,新的B是下一个列表元素。

如何做到这一点,用一些过滤器或收集?哦,如果算法对你来说听起来不太好,我可以批评!

编辑:我没有要求解决方案,但只是正确的功能来查找!

回答

6

说我有一个整数列表,我想穿过它们,只保留那些比以前大1以上的整数。我会使用foldLeft来逐步通过它们,只建立可接受的项目列表:

val nums = List(1,2,4,5,7) 

nums.foldLeft(List[Int]()){ 
    case (List(), b) => List(b) 
    case (list, b) if b - list.head > 1 => list :+ b 
    case (list, b) => list 
} 
+3

好的和明确的解释。 'b :: list'在中间情况下+一个'.reverse'对结果会更有效 –

+0

@TheArchetypalPaul你能解释为什么这样更有效吗? – mattinbits

+1

略有修改版本:'nums.foldLeft(List [Int]()){case(Nil,b)=> List(b); case(ls @(x :: xs),b)=> if(b-x> 1)b :: ls else ls} .reverse' – Eastsun