将元素移动到Scala中列表的前面

时间:2014-07-21 17:06:54

标签: scala data-structures scala-collections

我想知道是否有办法在列表中找到一个元素并将其移到Scala列表的前面?有没有什么简单的方法可以做到这一点,除了迭代列表,然后删除该元素,然后将其预先挂起到列表的前面?

2 个答案:

答案 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)