gpt4 book ai didi

可迭代且具有长度的 Scala 类型?

转载 作者:行者123 更新时间:2023-12-01 11:05:11 24 4
gpt4 key购买 nike

在编写 Scala 代码时,我经常遇到这样的情况:我有“处理器”函数,这些函数对元素集合进行迭代操作,并且还需要知道集合的长度。

另一方面,我有生成集合的“提供者”函数,因此已经知道长度。生成的集合可能是List[T]Array[T]Set[T]等,但即使是List[T],我的生成器知道大小(即使 List 类型不存储它)。

因此,我自然会将“处理器”函数声明为采用似乎适合所有集合类型的最通用类型 Iterable[T] 作为参数。然而,他们随后在内部需要以 O(N) 的成本通过迭代集合遍历找出大小,这是不可取的。

所以我天真的解决方案是创建一个像 IterableWithSize[T] 这样的新类型,并让提供者和处理器函数创建并采用这种类型。 Seq[T]IndexedSeq[T] 似乎都不符合要求。但这似乎是一个相对常见的用例,所以我怀疑是否有更惯用的方法来做到这一点。那会是什么?

最佳答案

在 Scala 集合中,size 等对性能敏感的方法不是从 traits 继承的,而是在底层类型中被覆盖的。例如查看 immutable.HashSet 的实现:

https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_0_1/src//library/scala/collection/immutable/HashSet.scala

所以你不需要关心它。只需定义一个高级通用特征,例如 TraversableIterable,您就完成了。

关于可迭代且具有长度的 Scala 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580759/

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