gpt4 book ai didi

scala - 为什么Scala有SeqView而没有SetView?

转载 作者:行者123 更新时间:2023-12-02 07:57:42 25 4
gpt4 key购买 nike

鉴于 Seq.view 返回一个 SeqView,我希望 Set.view 返回一个 SetView >,但不存在这样的 View ; Set.view 相反返回一个 IterableView

不幸的是,IterableView缺少一些方法,例如contains。比较这些,例如:

Seq(1, 2, 3).view.map(_ * 2).contains(4) // returns true
Set(1, 2, 3).view.map(_ * 2).contains(4) // error

没有 SetView 类存在有什么特殊原因吗?

此外,Iterable 没有 contains 方法是否有任何原因(考虑到这基本上是 find 的特殊情况)?

鉴于上述情况,在使用集合时是否有更好的替代方案(换句话说,Scala 中的最佳实践是什么):

Set(1, 2, 3).view.map(_ * 2).find(_ == 4).isDefined

最佳答案

没有 SetView 因为 View 的实现和测试很麻烦,而且这种努力不值得,因为集合的良好属性通常要求您已经热切地创建了整个集合设置(例如 O(1)O(log n) 查找)。

contains 不在 Iterable 中,正是因为 Set 扩展了 IterableSet code> contains 不应该进行类型检查,除非您要求集合中可能存在的内容。由于 Iterable 是协变的,因此它的 contains 必须承认您要求任何内容(正如 Seqcontains 所做的那样) )。

作为解决方法,您可以注意到 contains(x)exists(_ == x) 执行相同的操作,并且 exists > 位于 Iterable 上。

关于scala - 为什么Scala有SeqView而没有SetView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388744/

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