2016-11-20 70 views
0

我在Scala中有一个优先队列,我在下面定义。我的目标是,当我打电话出队时,我会得到三联中拥有最少三分之一的三联。我认为使用Ordering是要走的路,但我似乎无法让它起作用。创建一个包含三元组的PriorityQueue,并返回Scala中最小的第三个元素?

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是随机排列的。有任何想法吗?

回答

2

如果你想让所有三元组按照小三元素排序到最大,我认为这就是你所需要的。

val pq = PriorityQueue[(Int, Int, Int)]()(Ordering.by(-_._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))) 
相关问题