在Haskell中按函数结果对列表进行排序
我试图使用在Haskell中按函数结果对列表进行排序,haskell,Haskell,我试图使用sortBy和compare对列表进行排序,但在比较表达式方面遇到了问题。我需要它根据filmRating函数返回的平均值对列表进行排序 formattedByYear :: Int -> String formattedByYear year = concatMap formatString $ sortBy (compare filmRating) $ filmsByYear year filmRating :: Film -> Float filmRating (F
sortBy
和compare
对列表进行排序,但在比较表达式方面遇到了问题。我需要它根据filmRating函数返回的平均值对列表进行排序
formattedByYear :: Int -> String
formattedByYear year = concatMap formatString $ sortBy (compare filmRating) $ filmsByYear year
filmRating :: Film -> Float
filmRating (Film _ _ _ ratings)
| ratings == [] = 0.0
| otherwise = average (map snd ratings)
您需要的函数是
Data.Ord.comparing
Prelude> :t Data.Ord.comparing
Data.Ord.comparing :: Ord a => (b -> a) -> b -> b -> Ordering
您需要的函数是
Data.Ord.comparing
Prelude> :t Data.Ord.comparing
Data.Ord.comparing :: Ord a => (b -> a) -> b -> b -> Ordering
formattedByYear=concatMap FormattString$sortBy(比较电影评级)$filmsByYear给了我同样的结果。知道这个结果会很有帮助。导演:“Ridely Scott”电影名称:“测试”年份:2012评级:1.50导演:“测试1”电影名称:“测试1”年份:2012评级:4.50应该按评级排序。它是。当然是上升。如果你想先获得更高的收视率,
sortBy(flip$comparing filmRating)
.formattedByYear=concatMap FormattString$sortBy(comparing filmRating)$filmsByYear year year year year给了我同样的结果。知道结果会很有帮助。导演:“里德利·斯科特”电影名称:“测试”年份:2012年收视率:1.50导演:“测试1”电影名称:“测试1”年份:2012年收视率:4.50应该按收视率订购。它是。当然是上升。如果你想先获得更高的收视率,sortBy(flip$comparing filmRating)
。