【问题标题】:Create a PriorityQueue that contains triples, and returns the minimum third element in Scala?创建一个包含三元组的 PriorityQueue,并返回 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 是随机订购的。有任何想法吗?

【问题讨论】:

    标签: scala priority-queue


    【解决方案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)))
    

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2022-12-07
      • 2011-06-18
      • 2013-02-15
      • 2015-10-08
      相关资源
      最近更新 更多