我现在实际上被阻止了大约 4 个小时。我想获得按其 int 值排序的 Pairs[String, Int] 列表。功能分区工作正常,最好的N也应该如此,但是当将其加载到我的解释器中时,我得到:
<console>:15: error: could not find implicit value for evidence parameter of type Ordered[T]
在我的谓词上。有人看到问题是什么吗?我现在真的很绝望……
这是代码:
def partition[T : Ordered](pred: (T)=>Boolean, list:List[T]): Pair[List[T],List[T]] = {
list.foldLeft(Pair(List[T](),List[T]()))((pair,x) => if(pred(x))(pair._1, x::pair._2) else (x::pair._1, pair._2))
}
def bestN[T <% Ordered[T]](list:List[T], n:Int): List[T] = {
list match {
case pivot::other => {
println("pivot: " + pivot)
val (smaller,bigger) = partition(pivot <, list)
val s = smaller.size
println(smaller)
if (s == n) smaller
else if (s+1 == n) pivot::smaller
else if (s < n) bestN(bigger, n-s-1)
else bestN(smaller, n)
}
case Nil => Nil
}
}
class OrderedPair[T, V <% Ordered[V]] (t:T, v:V) extends Pair[T,V](t,v) with Ordered[OrderedPair[T,V]] {
def this(p:Pair[T,V]) = this(p._1, p._2)
override def compare(that:OrderedPair[T,V]) : Int = this._2.compare(that._2)
}
编辑:第一个函数通过将谓词应用于每个成员将列表分成两部分,bestN 函数应返回列表列表中最低 n 个成员的列表。并且该课程可以使 Pairs 具有可比性,在这种情况下,我想做的是:
val z = List(Pair("alfred",1),Pair("peter",4),Pair("Xaver",1),Pair("Ulf",2),Pair("Alfons",6),Pair("Gulliver",3))
有了这个给定的列表,我想获得例如:
bestN(z, 3)
结果:
(("alfred",1), ("Xaver",1), ("Ulf",2))