gpt4 book ai didi

scala - 如何在Scala中复制迭代器?

转载 作者:行者123 更新时间:2023-12-03 05:10:32 25 4
gpt4 key购买 nike

关于重复

这不是 How to clone an iterator? 的重复项

请不要盲目关闭这个问题,所谓重复的所有答案都有效。 OP 负责另一个问题,显然,答案适合他的问题,但不适合我的问题。

并不是每个类似的问题都是重复的,SE上有“扩展问题”这样的功能,唯一的方法是就同一主题再次询问以获得不同的、有效的答案。

问题

我有迭代器。我想获得它的副本(副本),这样我就可以完全独立地处理原件并进行复制。

重要

通过反射或序列化进行复制是不行的(性能损失)。

示例

var list = List(1,2,3,4,5)
var it1 = list.iterator
it1.next()

var it2 = it1 // (*)
it2.next()

println(it1.next())

这将简单地引用it1,因此当更改it1时,it2也会更改,反之亦然。

上面的示例使用List,我目前正在努力使用HashMap,但问题是一般性的 - 只是迭代器。

方法#1

如果编辑行 (*) 并写入:

var it2 = it1.toList.iterator

(这被建议作为链接问题中的解决方案)执行程序时抛出异常。

方法#2

“你拿着 list 然后......”。不,我不。我没有列表,我有迭代器。一般来说,我对迭代器背后的集合一无所知,我唯一拥有的就是迭代器。我必须“ fork ”它。

最佳答案

您无法在不破坏迭代器的情况下复制它。 iterator 的约定是它只能被遍历一次。

您链接到的问题显示了如何用您已销毁的一份来换取两份副本。您不能继续使用原始版本,但现在可以独立运行两个新副本。

关于scala - 如何在Scala中复制迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797990/

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