gpt4 book ai didi

Haskell——标签集分区用什么?

转载 作者:行者123 更新时间:2023-12-02 18:34:58 25 4
gpt4 key购买 nike

初学者问题——您通常使用什么作为多重 map ?我想要一个带有标签函数并按每个标签对元素进行分区的函数。例如,

f x | x `mod` 2 == 0 = EVEN
| otherwise = ODD

分区 f l​​st 的输出,其中 lst::[Int]

EVEN --> [list of even numbers]
ODD --> [sublist of odd numbers]

抱歉打扰了,我在 Hoogle 上找不到类似的东西。我想我可以通过 Data.List.Keygroup 函数、sort 和一些映射来到达那里,但必须有一个更简单的方法怎么样,不是吗?这似乎是一个普遍有用的功能。

最佳答案

当只有两种情况时,可以将它们映射为 bool 值并使用 Data.List.partition .

Prelude Data.List> partition odd [1, 23, 42, 7, 1337, 8]
([1,23,7,1337],[42,8])

一般情况下,您可以使用Data.Map使用列表或集合作为值类型。您可以使用 Data.Map.fromListWith 轻松构建一个.

Prelude Data.Map> let partition f xs = fromListWith (++) [(f x, [x]) | x <- xs]
Prelude Data.Map> partition (`mod` 3) [1, 23, 42, 7, 1337, 8]
fromList [(0,[42]),(1,[7,1]),(2,[8,1337,23])]

关于Haskell——标签集分区用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810773/

25 4 0