Scala - PriorityQueue 的排序失败
Scala - Ordering fails for PriorityQueue
我正在尝试在 Scala 中创建一个简单的优先级队列:
val priorities: mutable.PriorityQueue[Priority] = mutable.PriorityQueue(
Priority(2, 302),
Priority(3, 300),
Priority(5, 400),
Priority(4, 309),
Priority(1, 301)
)(Ordering.by[Priority, Int](_.priority).reverse)
case class Priority(priority: Int, value: Int)
当我这样做时
priorities.foreach(p => println(p.priority, p.value))
我期望的输出是:
(1,301)
(2,302)
(3,300)
(4,309)
(5,400)
但是,我得到:
(1,301)
(2,302)
(5,400)
(4,309)
(3,300)
如您所见,排序有问题。我能否深入了解我哪里出错了,我该怎么做才能获得所需的输出?
foreach
方法处理 PriorityQueue
的所有元素,但不一定按排序顺序处理。如果删除元素,您可以看到排序有效:
while (priorities.nonEmpty) println(priorities.dequeue())
Priority(1,301)
Priority(2,302)
Priority(3,300)
Priority(4,309)
Priority(5,400)
该实现将第一个元素保留为最高优先级元素,但其余元素未排序。 dequeue
会将新的最高优先级元素置于最前面。
似乎没有一种非破坏性的方式来按顺序显示整个 PriorityQueue
。
我正在尝试在 Scala 中创建一个简单的优先级队列:
val priorities: mutable.PriorityQueue[Priority] = mutable.PriorityQueue(
Priority(2, 302),
Priority(3, 300),
Priority(5, 400),
Priority(4, 309),
Priority(1, 301)
)(Ordering.by[Priority, Int](_.priority).reverse)
case class Priority(priority: Int, value: Int)
当我这样做时
priorities.foreach(p => println(p.priority, p.value))
我期望的输出是:
(1,301)
(2,302)
(3,300)
(4,309)
(5,400)
但是,我得到:
(1,301)
(2,302)
(5,400)
(4,309)
(3,300)
如您所见,排序有问题。我能否深入了解我哪里出错了,我该怎么做才能获得所需的输出?
foreach
方法处理 PriorityQueue
的所有元素,但不一定按排序顺序处理。如果删除元素,您可以看到排序有效:
while (priorities.nonEmpty) println(priorities.dequeue())
Priority(1,301)
Priority(2,302)
Priority(3,300)
Priority(4,309)
Priority(5,400)
该实现将第一个元素保留为最高优先级元素,但其余元素未排序。 dequeue
会将新的最高优先级元素置于最前面。
似乎没有一种非破坏性的方式来按顺序显示整个 PriorityQueue
。