Haskell相当于Scala的groupBy
发布时间:2020-12-16 09:39:12 所属栏目:安全 来源:网络整理
导读:Scala在列表中具有一个功能组,该列表接受从列表项中提取密钥的功能,并返回另一个列表,其中项目是由密钥和产生该密钥的项目列表组成的元组。换句话说,这样的东西: List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2)// List((0,List(2,8)),(1,List(1,9))) (实际上
Scala在列表中具有一个功能组,该列表接受从列表项中提取密钥的功能,并返回另一个列表,其中项目是由密钥和产生该密钥的项目列表组成的元组。换句话说,这样的东西:
List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2) // List((0,List(2,8)),(1,List(1,9))) (实际上,它看起来像在当前的版本,它提供了一个地图,但这并不重要)。 C#有一个更有用的版本,可以让你同时映射值(非常有用的,如果说,你的键功能只是提取一部分元组)。 Haskell有一个groupBy,但它有些不同 – 它根据一些比较功能对事物进行分组。 在我去写下之前,哈斯克尔有没有相当于Scala的groupBy? Hoogle没有什么可以预期的签名看起来像(下),但我可能只是错了。 Eq b => (a -> b) -> [a] -> [(b,[a])] 解决方法
你可以很容易地编写函数,但是如果你想要一个有效的解决方案,你需要对分类器函数的结果放置一个Ord或Hashable约束。例:
import Control.Arrow ((&&&)) import Data.List import Data.Function myGroupBy :: (Ord b) => (a -> b) -> [a] -> [(b,[a])] myGroupBy f = map (f . head &&& id) . groupBy ((==) `on` f) . sortBy (compare `on` f) > myGroupBy (`mod` 2) [1..9] [(0,[2,8]),[1,9])] 您也可以使用像Data.HashMap.Strict这样的哈希映射,而不是按预期的线性时间进行排序。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 使用“randomSplit”进行机器学习目的,了解在Scala中拆分数
- 一招制敌 - 玩转 AngularJS 指令的 Scope (作用域)
- twitter-bootstrap – 使用Twitter Bootstrap Modal的Ember
- AngularJS的Filter用法详解
- 【数据结构】堆排序
- 如何在Scala应用程序的设计中实现不变性?
- angularjs – 如何在角度中正确使用ng重复?
- twitter-bootstrap – Bootstrap 2.3.1 popover导致父模式关
- bash – “${!var}”在shell脚本中的含义是什么?
- 在编辑时关闭angularJS中的重新排序