Scala的Iterable有maxBy
:
查找产生函数
f
测量的最大值的第一个元素。
def maxBy[B](f: (A) ⇒ B)(implicit cmp: Ordering[B]): A
示例:
scala> Seq(-2, 1).maxBy(Math.abs)
res0: Int = -2
scala> Seq(-2, 3).maxBy(Math.abs)
res1: Int = 3
Haskell的等效方法是什么?
答案 0 :(得分:21)
Scala的Iterable
与Haskell的Traversable
有关。但是,在这种情况下,Foldable
足以找到给定集合的最大值,因此请将maximumBy
from Data.Foldable
与compare `on` f
(on
中的Data.Function
一起使用)或comparing f
(来自comparing
的{{1}}):
Data.Ord
答案 1 :(得分:7)
使用
Data.List.maximumBy
和
Data.Ord.comparing
comparing :: Ord a => (b -> a) -> b -> b -> Ordering
maximumBy :: (a -> a -> Ordering) -> [a] -> a
示例:
> import Data.Ord (comparing)
> import Data.List (maximumBy)
> maximumBy (comparing abs) [-2, 1]
-2
> maximumBy (comparing abs) [-2, 3]
3