我想知道是否有办法在列表中找到一个元素并将其移到Scala列表的前面?有没有什么简单的方法可以做到这一点,除了迭代列表,然后删除该元素,然后将其预先挂起到列表的前面?
答案 0 :(得分:10)
如何使用span
?:
def moveToFront[A](y: A, xs: List[A]): List[A] = {
xs.span(_ != y) match {
case (as, h::bs) => h :: as ++ bs
case _ => xs
}
}
答案 1 :(得分:1)
考虑使用partition
,其中多次出现的感兴趣的项目被移动到头部,像这样,
implicit class RichList[A] (val a: List[A]) extends AnyVal {
def toHead(e: A) = {
val (l,r) = a.partition(_ != e)
r ++ l
}
}
因此,例如val l = List(1,2,3,3,4,5,3)
我们有
l.toHead(3)
res: List(3, 3, 3, 1, 2, 4, 5)
l.toHead(7)
res: List(1, 2, 3, 3, 4, 5, 3)