簡體   English   中英

是否有一個Haskell相當於Scala的Iterable.maxBy?

[英]Is there a Haskell equivalent of Scala's Iterable.maxBy?

Scala的IterablemaxBy

找到產生函數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方法呢?

Scala的Iterable與Haskell的Traversable 然而,在這種情況下, Foldable就足以找到最大一個給定的集合,所以使用maximumByData.Foldable會同compare `on` fonData.Function )或comparing fcomparing來自Data.Ord ) :

import Data.Foldable (maximumBy, Foldable)
import Data.Ord      (comparing)

maxBy :: (Foldable t, Ord a) => (b -> a) -> t b -> b
maxBy = maximumBy . comparing

使用Data.List.maximumByData.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM