gpt4 book ai didi

scala - 在 Scala 中,如何解决 TraversableLike.toIterator 效率低下的中间流

转载 作者:行者123 更新时间:2023-12-04 21:24:06 25 4
gpt4 key购买 nike

( Gen ) TraversableOnce.toIteratorTraversableLike 中被覆盖如 toStream.iterator ,导致中间流发生。

作为一个简单的例子,假设我正在尝试实现一个简单的 izip在调用 zip 之前总是将其参数强制转换为迭代器的实用程序以便在两个集合上产生一个有效的迭代器。

以下是低效的(由于中间流):

def izip[A,B](xs: TraversableOnce[A], ys: TraversableOnce[B]) =
xs.toIterator zip ys.toIterator

并且必须扩展为:
def izip[A,B](xs: Iterable[A], ys: Iterable[B]) =
xs.iterator zip ys.iterator
def izip[A,B](xs: Iterator[A], ys: Iterable[B]) =
xs zip ys.iterator
def izip[A,B](xs: Iterable[A], ys: Iterator[B]) =
xs.iterator zip ys
def izip[A,B](xs: Iterator[A], ys: Iterator[B]) =
xs zip ys
// .. and more needed to handle Traversables as well

有没有更好的办法?

最佳答案

我认为 trait 只保证给定方法的存在,而不是它的实现。它们可以提供默认实现,但子类型可以覆盖它。

所以即使 TraversableLike 提供了 toIterator 的实现,将使用您传递的对象的实际实现。

如果您在使用标准集合时遇到性能问题,那么真正的问题可能出在别处。如果是自定义集合,则应覆盖 toIterator有一个合理的定义。

关于scala - 在 Scala 中,如何解决 TraversableLike.toIterator 效率低下的中间流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6691036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com