scala - 如何使用 argmax 方法扩展 Scala 集合?

标签 scala scala-2.8 extend

我想添加到所有有意义的集合中,一个 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/

相关文章:

具有发布者和订阅者特征的 Scala 类

Scala,检查 Actor 是否已退出

ios - 扩展 UIView 并在 iOS 中添加属性

scala - 将现有的 sbt 项目导入 IntelliJ

scala - 在 Scala 中,构造函数如何引用它正在创建的对象?

android - 将相同的上下文菜单添加到多个 Activity

Python 扩展了一个空列表错误?

scala - 如何编写一个返回与传递给它的集合类型相同的集合类型的 zipWith 方法?

scala - Scala 中的函数并行性和惰性

scala - 余积的类型类推导?