Ich versuche, einige Codes wie unten zu schreiben -Scala: Wie für das Verständnis von einem verschachtelten brechen
def kthSmallest(matrix: Array[Array[Int]], k: Int): Int = {
val pq = new PriorityQueue[Int]() //natural ordering
var count = 0
for (
i <- matrix.indices;
j <- matrix(0).indices
) yield {
pq += matrix(i)(j)
count += 1
} //This would yield Any!
pq.dequeue() //kth smallest.
}
Meine Frage ist, dass ich nur eine Schleife wollen, bis die Zeitzählung kleiner als k (etwas wie takeWhile (count! = k)), aber da ich auch Elemente in die Prioritätswarteschlange in der Ausbeute einfüge, wird dies im aktuellen Zustand nicht funktionieren.
Meine anderen Optionen sind, eine verschachtelte Schleife zu schreiben und zurückzukehren, sobald die Anzahl k erreicht. Ist es möglich mit Ertrag zu tun? Ich konnte es noch nicht idiomatisch finden. Alle Hinweise wären hilfreich.
Sie zwingend notwendig und zweckmäßig sind mischen. Sie tun dies entweder voll funktionsfähig (Entfernen der Warteschlange) oder Sie tun es völlig imperativ (mit einer regulären for-Schleife, daher die Ausbeute zu entfernen) – Chobeat
Die PriorityQueue ist eine Implementierung von scala.collection.mutable. Wie sonst zu einer veränderbaren Sammlung hinzufügen? – learningTheRopes
@ Chobeat warum? Es ist perfekt machbar, Konzepte aus beiden Paradigmen zu mischen. – pedromss