Scala集合选择元素,直到第一个满足要求

时间:2016-02-05 07:52:21

标签: scala

例如我有跟随Scala列表,我希望得到一个子列表,直到有一个要求可以满足。

val list = Seq(1,2,3,4,5,5,4,1,2,5)

要求是数字是5,所以我希望结果为:

Seq(1,2,3,4)

目前,我使用Scala集合indexWheresplitAt返回:

list.splitAt(list.indexWhere(x => x == 5))

(Seq(1,2,3,4), Seq(5,5,4,1,2,5))

我不确定有更好的方法可以通过更好的Scala集合方法实现相同的方法吗?

2 个答案:

答案 0 :(得分:7)

您可以使用takeWhile

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

scala> list.takeWhile(_ != 5)
res30: Seq[Int] = List(1, 2, 3, 4)

答案 1 :(得分:3)

像这样使用span

val (l,r) = list.span(_ != 5)

提供

l: List(1, 2, 3, 4)
r: List(5, 5, 4, 1, 2, 5)

或者,你可以写

val l = list.span(_ != 5)._1

仅访问生成的元组的第一个元素。

这会将列表排在第一个不符合条件的元素上。