我想实现在斯卡拉(2.10版本)A *搜索,但我已经遇到了一个砖墙 - 我无法弄清楚如何使用Scala的优先级队列。 这似乎是一个简单的任务,但搜索在谷歌没来任何东西(除了停止单一的代码示例2.8版工作回)
我有一组方形的,表示为(Int, Int)
S,我需要与所代表的优先级将它们插入Int
秒。 在Python这是很简单,因为你只需要密钥,值对的列表,并使用heapq功能对它进行排序。 但现在看来,Scala的元组甚至没有可比性。
那么,你如何做到这一点? 我是由完全缺乏网上信息感到惊讶,因为它应该是多么简单。
这里实际上是预先定义的字典序元组 - 但你需要导入它 :
import scala.math.Ordering.Implicits._
此外,你可以定义自己的排序。 假设我要基于元组的第一和第二部件之间的差异来安排的元组,:
scala> import scala.collection.mutable.PriorityQueue
// import scala.collection.mutable.PriorityQueue
scala> def diff(t2: (Int,Int)) = math.abs(t2._1 - t2._2)
// diff: (t2: (Int, Int))Int
scala> val x = new PriorityQueue[(Int, Int)]()(Ordering.by(diff))
// x: scala.collection.mutable.PriorityQueue[(Int, Int)] = PriorityQueue()
scala> x.enqueue(1 -> 1)
scala> x.enqueue(1 -> 2)
scala> x.enqueue(1 -> 3)
scala> x.enqueue(1 -> 4)
scala> x.enqueue(1 -> 0)
scala> x
// res5: scala.collection.mutable.PriorityQueue[(Int, Int)] = PriorityQueue((1,4), (1,3), (1,2), (1,1), (1,0))
的确,在对的整数隐式顺序(A,B)。 那会是什么? 也许他们都是积极的,你可以使用(A - 1.0 / B)? 或者,他们都没有了,你可以用,什么,(A + ATAN(B / PI))? 如果你心里有一个排序,你可以考虑在有您的订购一类包装一下你对。