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不可变列表来高效地实现许多“列表键入”算法作为鹅卵石. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |