我想做的是在 Scala 中对 List 对象进行排序,而不是对列表中的元素进行排序。例如,如果我有两个 Ints 列表:
val l1 = List(1, 2, 3, 7)
val l2 = List(1, 2, 3, 4, 10)
我希望能够将它们按 l1 > l2 的顺序排列。
我创建了一个案例类,它可以满足我的需要,但问题是当我使用它时,我的其他方法都不起作用。我是否需要实现类中的所有其他方法,即 flatten、sortWith 等?
我的课程代码如下所示:
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
}
}
现在,如果我创建一个 ItemSets 数组,我可以对其进行排序:
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)
给我带来问题的两种方法是:
def itemFrequencies(transDB: Array[ItemSet]): Map[Int, Int] = transDB.flatten.groupBy(x => x).mapValues(_.size)
我得到的错误是:
Map[Nothing, Int] 类型的表达式不符合预期的 Map[Int, Int] 类型
而对于这个:
def sortListAscFreq(transDB: Array[ItemSet], itemFreq: Map[Int, Int]): Array[List[Int]] = {
for (l <- transDB) yield
l.sortWith(itemFreq(_) < itemFreq(_))
}
我得到:
无法解析符号 sortWith。
有没有一种方法可以扩展 List[Int] 以便我可以对列表集合进行排序而不会失去其他方法的功能?