我想添加到所有有意义的集合中,一个 argMax方法。
怎么做?使用隐式?
最佳答案
在 Scala 2.8 上,这有效:
val list = List(1, 2, 3)
def f(x: Int) = -x
val argMax = list max (Ordering by f)
正如 mkneissl 所指出的那样,这不会返回最大点的集合。这是一个替代实现,它尝试减少对
f
的调用次数。 .如果调用 f
没那么重要,见mkneissl's answer .另外,请注意他的答案是 curried,这提供了卓越的类型推断。def argMax[A, B: Ordering](input: Iterable[A], f: A => B) = {
val fList = input map f
val maxFList = fList.max
input.view zip fList filter (_._2 == maxFList) map (_._1) toSet
}
scala> argMax(-2 to 2, (x: Int) => x * x)
res15: scala.collection.immutable.Set[Int] = Set(-2, 2)
关于scala - 如何使用 argmax 方法扩展 Scala 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3050557/