如果n小于大小,xs.sliding(n)的行为是否不一致?

Adr*_*ian 15 scala scala-collections

根据scaladoc,sliding()返回..."迭代器产生大小的可迭代集合size,除非最后和唯一的元素将被截断,如果元素少于size."

对我来说,直观地说,如果可用,滑动(n)将返回n个元素的滑动窗口.对于当前的实现,我需要执行额外的检查以确保我没有获得1或2个元素的列表.

scala> val xs = List(1, 2)
xs: List[Int] = List(1, 2)

scala> xs.sliding(3).toList
res2: List[List[Int]] = List(List(1, 2))
Run Code Online (Sandbox Code Playgroud)

我希望这里有一个空列表.为什么用这种方式实现sliding()呢?

Rex*_*err 12

是一个错误,但从2.9开始没有修复.每个人偶尔会出现设计错误,一旦进入图书馆,删除它是一项非常重要的任务.

解决方法:添加过滤器.

xs.sliding(3).filter(_.size==3).toList
Run Code Online (Sandbox Code Playgroud)


Emi*_*Sit 7

您可以使用GroupedIterator#withPartial修饰符"解决"此问题.

scala> val xs = List(1, 2)
xs: List[Int] = List(1, 2)

scala> xs.iterator.sliding(3).withPartial(false).toList
res7: List[Seq[Int]] = List()
Run Code Online (Sandbox Code Playgroud)

(我不知道为什么你需要说xs.iteratorxs.sliding(3).withPartial(false)不起作用,因为你得到一个Iterator而不是一个GroupedIterator.