Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala dropWhile vs过滤器_Scala_Filter_Functional Programming_Iterator - Fatal编程技术网

Scala dropWhile vs过滤器

Scala dropWhile vs过滤器,scala,filter,functional-programming,iterator,Scala,Filter,Functional Programming,Iterator,为什么??我希望两者的输出相同。dropWhile丢弃条件为true的集合开始时的所有项。一旦第一项不符合条件,它就会停止丢弃 filter丢弃整个集合中条件不正确的所有项。它直到收集结束才停止 在您的情况下,dropWhile会删除1,但在到达2时会停止,因为条件\u%2!=0为false 另一方面,filter会删除所有\uU%2==0为假的值,这些值都是奇数。dropWhile是takeWhile的否定版本(因此名称类似),而不是filter@sepp2k我不明白你的评论是如何解释上述输出

为什么??我希望两者的输出相同。

dropWhile
丢弃条件为
true
的集合开始时的所有项。一旦第一项不符合条件,它就会停止丢弃

filter
丢弃整个集合中条件不正确的所有项。它直到收集结束才停止

在您的情况下,
dropWhile
会删除
1
,但在到达
2
时会停止,因为条件
\u%2!=0
为false


另一方面,
filter
会删除所有
\uU%2==0
为假的值,这些值都是奇数。

dropWhile
takeWhile
的否定版本(因此名称类似),而不是
filter
@sepp2k我不明白你的评论是如何解释上述输出的。“dropWhile是takeWhile的否定版本”-好的,那么?您的第二个版本与第一个版本有两个不同:您使用的是
过滤器
而不是
dropWhile
,并且您否定了传递给它的条件。您说您希望两个版本的行为相同,因此在我看来,您认为
dropWhile
的行为类似于
filter
,但有一个否定的条件(因此,如果您否定该条件,您将从这两个版本获得相同的结果)。但它的行为不像带有否定条件的
filter
——它的行为就像带有否定条件的
takeWhile
。如果在第二个版本中将
filter
替换为
takeWhile
,则其作用与第一个版本相同。@sepp2k“其作用类似于带否定条件的
takeWhile
”——但在这种情况下,它似乎不起任何作用。让我这样问一下-您是如何仅使用
takeWhile
dropWhile
获得与第二个相同的输出的?当然,它会做一些事情:它会删除1。“你是如何只使用takeWhile和dropWhile获得与第二个相同的输出的?”我不这么认为
takeWhile
/
dropWhile
filter
/
filterNot
做不同的事情,在当前情况下使用您想要的行为。你不能真的模仿一个人和另一个人的行为,你为什么要这样做呢?当你可以首先使用你想要的一个的时候?我明白了。现在Scaladoc也有意义了:
dropWhile
-跳过这个迭代器中满足给定谓词p的最长元素序列。因此,正如@sepp2k所说,在构造时,仅使用
*不可能获得第二个输出。
val xs = Iterator
  .from(1)
  .dropWhile(_ % 2 != 0)
  .takeWhile(_ < 10)
  .toList
val ys = Iterator
  .from(1)
  .filter(_ % 2 == 0)
  .takeWhile(_ < 10)
  .toList
println(xs)
println(ys)
List(2, 3, 4, 5, 6, 7, 8, 9)
List(2, 4, 6, 8)