Was ich tun möchte, ist List Objekte in scala zu sortieren, nicht die Elemente in der Liste zu sortieren. Zum Beispiel Wenn ich zwei Listen von Ints:Wie kann ich List [Int] Objekte in Scala sortieren?
val l1 = List(1, 2, 3, 7)
val l2 = List(1, 2, 3, 4, 10)
ich sie in der Lage sein, um in dem l1 zu setzen> l2.
Ich habe eine Fall-Klasse erstellt, die tut, was ich brauche, aber das Problem ist, dass, wenn ich es benutze keine meiner anderen Methoden arbeiten. Muss ich alle anderen Methoden in der Klasse implementieren, d. H. Flatten, sortieren, etc?
Meine Klasse Code sieht wie folgt aus:
class ItemSet(itemSet: List[Int]) extends Ordered[ItemSet] {
val iSet: List[Int] = itemSet
def compare(that: ItemSet) = {
val thisSize = this.iSet.size
val thatSize = that.iSet.size
val hint = List(thisSize, thatSize).min
var result = 0
var loop = 0
val ths = this.iSet.toArray
val tht = that.iSet.toArray
while (loop < hint && result == 0) {
result = ths(loop).compare(tht(loop))
loop += 1
}
if (loop == hint && result == 0 && thisSize != thatSize) {
thisSize.compare(thatSize)
} else
result
}
}
Nun, wenn ich ein Array von itemsets erstellen Ich kann es sortieren:
val is1 = new ItemSet(List(1, 2, 5, 8))
val is2 = new ItemSet(List(1, 2, 5, 6))
val is3 = new ItemSet(List(1, 2, 3, 7, 10))
Array(is1, is2, is3).sorted.foreach(i => println(i.iSet))
scala> List(1, 2, 3, 7, 10)
List(1, 2, 5, 6)
List(1, 2, 5, 8)
Die beiden Methoden, die mir Probleme geben, sind:
def itemFrequencies(transDB: Array[ItemSet]): Map[Int, Int] = transDB.flatten.groupBy(x => x).mapValues(_.size)
die Fehler, die ich bekommen ist:
Expression von Typ-Map [Nothing, Int] entspricht nicht erwarteten Typ Map [Int, Int]
und für diese ein:
def sortListAscFreq(transDB: Array[ItemSet], itemFreq: Map[Int, Int]): Array[List[Int]] = {
for (l <- transDB) yield
l.sortWith(itemFreq(_) < itemFreq(_))
}
ich:
nicht Symbol auflösen kann sortWith.
Kann ich List [Int] einfach so erweitern, dass ich eine Sammlung von Listen sortieren kann, ohne die Funktionalität anderer Methoden zu verlieren?
Vielen Dank! Ich kann nicht glauben, dass ich nur 2 Tage damit verbracht habe, alles zum Laufen zu bringen. –
@Val, ich denke, das ist Sarkasmus, aber du verpasst den Punkt irgendwie - das _array_ von Listen ist _nicht_ sortiert, bevor ".sorted" aufgerufen wird, und dann ist es. Außerdem verwende ich nur die Beispiele des OP, was im Allgemeinen eine gute Idee ist. –