gpt4 book ai didi

Haskell 相当于 Scala 的 groupBy

转载 作者:行者123 更新时间:2023-12-03 12:13:47 25 4
gpt4 key购买 nike

Scala 有一个函数 groupBy在接受从列表项中提取键的函数的列表上,并返回另一个列表,其中项是由键和产生该键的项列表组成的元组。换句话说,是这样的:

List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2)
// List((0, List(2,4,6,8)), (1, List(1,3,5,7,9)))

(实际上,在当前版本中,它似乎提供了 Map,但这并不重要)。 C# 有一个更有用的版本,可让您同时映射值(例如,如果您的键函数只是提取元组的一部分,则非常有用)。

Haskell 有一个 groupBy ,但它有些不同 - 它根据一些比较功能对事物进行分组。

在我去写之前,有没有相当于 Scala 的 groupBy在 haskell ? Hoogle 没有任何我期望签名看起来像的东西(如下),但我可能只是弄错了。
Eq b => (a -> b) -> [a] -> [(b,[a])]

最佳答案

您可以很容易地自己编写函数,但您需要放置 OrdHashable如果您想要一个有效的解决方案,请限制分类器函数的结果。例子:

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,4,6,8]),(1,[1,3,5,7,9])]

你也可以使用像 Data.HashMap.Strict 这样的哈希映射。而不是对预期的线性时间进行排序。

关于Haskell 相当于 Scala 的 groupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15412027/

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