Ich versuche, eine einfache Implementierung einer Geduldsart zu schreiben, mit Scala.
Ich habe es richtig geschafft, die Anfangspfähle zu erstellen; Allerdings bereitet mir die Verwendung einer Prioritätswarteschlange zur Vereinfachung der Generierung von Ausgangslisten Kopfschmerzen.Scala Problem mit PriorityQueue nicht standardmäßige Reihenfolge für Stack [A]
Es scheint, dass meine Bestellung Implementierung entweder falsch ist oder nicht berücksichtigt zu werden:
def PileOrdering = new Ordering[Stack[A]] {
def compare(a : Stack[A], b : Stack[A]) = a.head.compare(b.head)
}
// Use a priority queue, ordering on stack heads (smallest stack elems)
val pq = new PriorityQueue[Stack[A]]()(PileOrdering)
// piles is a List[Stack[A]]
pq ++= piles
// Extract an ordered list of elements
val returnVal = (0 until count) map (_ => {
val smallestList = pq.dequeue
val smallestVal = smallestList.pop
if (smallestList.length > 0){
pq.enqueue(smallestList)
}
smallestVal
})
Die Priorityqueue erscheint durch bestellt werden (man stelle ich den Standard-Stack-Ordering) Stackgröße, anstatt meine Bestellung.
Fällt irgendetwas als offensichtlich falsch aus? Jede Hilfe würde sehr erhalten werden.
Danke,
Edit: ich es in der ursprünglichen Frage nicht machen klar: Ich bin mit Scala 2.8.1.
Edit2: Ich habe erwartet, dass returnVal eine kleinste bis größte Anordnung von Elementen enthält, die gefunden wird, indem das kleinste Element aus den Köpfen aller Stapel entnommen wird. Daniel hat darauf hingewiesen, dass meine Bestellung meine Stacks von Groß- zu Kleinst sortieren wird (die Stacks selbst sind bereits richtig sortiert, mit dem kleinsten Element oben), was das Problem zu sein scheint.
Bitte geben Sie _compilable_ code ein. Dieser wird nicht kompiliert, da sowohl "A" als auch "count" unbekannt sind. –
Ja, du hast Recht. Ich denke, das ist das Problem mit Fragen in den frühen Morgenstunden. Ich bin jetzt nicht zu Hause, aber ich werde die Frage später bearbeiten, wenn ich es bin. – owst
Bitte machen Sie klar, was der Code in 'returnVal' auch tun soll - sonst wird es schwierig zu wissen, ob Ihr Code" falsch "ist oder nicht. :-) –