Scala - 从有序列表中选择元素

时间:2013-05-03 09:39:18

标签: list scala

我正在寻找一种很好的方法来删除与有序列表相同的前N个元素,例如

List(1,1,1,2,3,3)

应该返回

removeSame(list)  -> (1,1,1)

有没有一种很好的方法,而不是删除列表的头部,然后在余数上使用takeWhile,最后使用dropwhile?我可以想到简单的非功能性解决方案,但我想知道是否还存在任何功能性解决方案

3 个答案:

答案 0 :(得分:7)

避免重复takeWhiledropWhile获取前缀和余数的功能方法是使用span,即

scala> val list = List(1,1,1,2,3,3)
list: List[Int] = List(1, 1, 1, 2, 3, 3)

scala> val (prefix, rest) = list span (_ == list.head)
prefix: List[Int] = List(1, 1, 1)
rest: List[Int] = List(2, 3, 3)

答案 1 :(得分:3)

这是你要找的吗?

scala> val l = List(1,1,1,2,3,3)
l: List[Int] = List(1, 1, 1, 2, 3, 3)

scala> l.takeWhile(_ == l.head)
res6: List[Int] = List(1, 1, 1)

scala> val l = List()
l: List[Nothing] = List()

scala> l.takeWhile(_ == l.head)
res7: List[Nothing] = List()

答案 2 :(得分:0)

这不是最好的方法,但这也有效:

def removeSame(l: List) = if( !l.isEmpty) l.groupBy( x => x)(l.head) else List()