创建一个包含三元组的 PriorityQueue,并返回 Scala 中的最小第三个元素?
Posted
技术标签:
【中文标题】创建一个包含三元组的 PriorityQueue,并返回 Scala 中的最小第三个元素?【英文标题】:Create a PriorityQueue that contains triples, and returns the minimum third element in Scala? 【发布时间】:2016-11-20 02:39:38 【问题描述】:我在下面定义的 Scala 中有一个优先级队列。我的目标是,当我调用 dequeue 时,我会得到该三元组中第三个元素最少的三元组。我认为使用订购是要走的路,但我似乎无法让它发挥作用。
import scala.collection.mutable.PriorityQueue
def orderByWeight(lst : (Int, Int, Int)) = lst._3
val pq = new PriorityQueue[(Int, Int, Int)]()(Ordering.by(orderByWeight))
var x = ListBuffer((0,1,2), (0,2,3), (0,3,4))
x.map(i => pq.enqueue(i))
我对我的orderByWeight
函数应该是什么感到困惑。对于上面的代码,如果我调用pq.dequeue
,所需的输出应该是(0, 1, 2)
。注意x
是随机订购的。有任何想法吗?
【问题讨论】:
【参考方案1】:如果您希望所有 3 元组按从小到大的第 3 个元素的顺序出列,我认为这就是您所需要的。
val pq = PriorityQueue[(Int, Int, Int)]()(Ordering.by(-_._3))
如果您需要在第 3 个元素关系的情况下的有序输出,您可以扩展它。
var x = ListBuffer((0,1,2), (0,2,3), (0,3,4), (1,0,2))
val pq = PriorityQueue(x:_*)(Ordering[(Int, Int)].on(x => (-x._3, -x._2)))
【讨论】:
以上是关于创建一个包含三元组的 PriorityQueue,并返回 Scala 中的最小第三个元素?的主要内容,如果未能解决你的问题,请参考以下文章
Python PriorityQueue 仅获取元组的一部分