加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何克隆迭代器?

发布时间:2020-12-16 09:17:20 所属栏目:安全 来源:网络整理
导读:假设我有一个迭代器: val it = List("a","b","c").iterator 我想要一份我的代码是: val it2 = it.toList.iterator 这是正确的,但似乎不太好.还有其他的API吗? 解决方法 警告:从Scala 2.9.0开始,至少这将使原来的迭代器为空.你可以把ls = it.toList; val
假设我有一个迭代器:

val it = List("a","b","c").iterator

我想要一份我的代码是:

val it2 = it.toList.iterator

这是正确的,但似乎不太好.还有其他的API吗?

解决方法

警告:从Scala 2.9.0开始,至少这将使原来的迭代器为空.你可以把ls = it.toList; val it1 = ls.iterator; val it2 = ls.iterator得到两个副本.或使用重复(也适用于非列表).

Rex的答案是通过这本书,但实际上你的原始解决方案是迄今为止最有效的scala.collection.immutable.List的.

列表迭代器可以使用该机制重复,基本上没有开销.这可以通过快速回顾scala.collection.immutable.LinearSeq中的iterator()的实现来确认,尤其是. toList方法的定义,它简单地返回支持Seq的_.toList,如果它是一个List(就像在你的情况),它是身份.

在调查您的问题之前,我并没有意识到此列表迭代器的属性,而且我非常感谢信息…除此之外,这意味着可以通过使用迭代器的Scala不可变列表来高效地实现许多“列表键入”算法作为鹅卵石.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读