gpt4 book ai didi

scala - 我期望 Scala 中的可变排序集不起作用(也许我错过了一些东西)

转载 作者:行者123 更新时间:2023-12-02 09:31:46 26 4
gpt4 key购买 nike

假设您有以下内容:

case class Foo(x: Int, y: Int) extends Ordered[Foo] {
override def compare(that: Foo): Int = x compareTo that.x
}

val mutableSet: scala.collection.mutable.SortedSet[Foo] =
scala.collection.mutable.SortedSet(Foo(1, 2), Foo(1,3))

我期望 mutableSet.size 的结果为 2。为什么,Foo(1,2)Foo(1,3) 不相等,但它们具有相同的顺序。所以排序后的集合应该是 (IMO) Foo(1,2), Foo(1,3)。因为这是它们创建的顺序(即使相反也可以,违反直觉,但也可以)。

但是,mutableSet.size 的结果是 1,它保存最后一个值,即 Foo(1,3)。我错过了什么?

最佳答案

其行为类似于 Java SortedSet 集合。 SortedSet 使用compareTo 来定义相等性,因此它从示例中消除了相同的 Foo 案例类。

在 Scala 2.11 中,它使用 scala.collection.TreeSet 来实现 SortedSet 实现。解决这个问题的最佳方法是将断点放入您的 compareTo 方法中。

TreeSet是使用AVL Tree数据结构实现的,您可以通过查看AVLTree.scala来检查其行为Node 类的 insert 方法。它将 compareTo 结果与 0 进行比较,以确定它是否在集合中重复元素。

关于scala - 我期望 Scala 中的可变排序集不起作用(也许我错过了一些东西),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32438397/

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