gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:16:43 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com