6

给定代码:

val test = List(1, 2, 3)
printList[Int](test.dropWhile((a: Int) => {a == 1}))

它会正确打印:2 3 使用这样的代码时:

val test = List(1, 2, 3)
printList[Int](test.dropWhile((a: Int) => {a == 2}))

它会打印不正确:1 2 3a == 3 该如何正确使用dropWhile

好吧,我发现 dropWhile 返回“此列表中第一个元素不满足谓词 p 的最长后缀”。所以如果我想删除一些满足谓词 p 的元素,我必须使用 filterNot :)

4

1 回答 1

30

那是因为dropWhile

删除满足谓词的元素的最长前缀。

也就是说,只要不再满足条件,它就会停止下降。在您的第二个示例中,它从一开始就没有满足,因此没有任何内容被丢弃。

使用过滤器(选择满足谓词的所有元素)或 filterNot(选择不满足谓词的所有元素)可能会更好:

val test = List(1, 2, 3)
printList[Int](test.filterNot((a: Int) => {a == 2}))

或者

val test = List(1, 2, 3)
printList[Int](test.filter((a: Int) => {a != 2}))
于 2013-10-14T00:59:43.070 回答