gpt4 book ai didi

haskell - 添加元组的第一个元素列表

转载 作者:行者123 更新时间:2023-12-01 07:27:17 25 4
gpt4 key购买 nike

我有一个定义如下的结构:

type P = [(Int, Int)]

我需要从该结构的列表中创建一个函数,如果满足以下条件,则添加元组中第一个位置的项目:元组的第二个元素相同。
add :: [P] -> P
add lists = ......

例如。
add [[(1,2), (3,0)], [(3,1), (7,0)]]

结果将是 [(1,2), (3,1), (10.0)] .

因为只会将元组 (3.0) 与 (7.0) 相加,因为它与 0 匹配。

最佳答案

这是一个“键控”操作,在标准库的帮助下可以很容易地解决。

import qualified Data.Map as M
Data.Map实现有限关联映射——即 M.Map k a有一组类型为 k 的键,并与每个键关联一个类型为 a 的值.

对这类问题极其有用的函数是 fromListWith :
M.fromListWith :: (a -> a -> a) -> [(k,a)] -> M.Map k a

第二个参数, (k,a)的列表元组,只是关联,将给定的键与给定的值相关联。第一个参数是一个组合函数,它说明如果列表中出现重复的键,要对值做什么。

您还必须使用 M.toList :: M.Map k a -> [(k,a)]它会返回存储在 Map 中的关联列表。下面是一个例子:
ghci> M.toList (M.fromListWith (+) [(1,2), (2,3), (1,4), (3,5)])
[(1,6),(2,3),(3,5)]

请注意键是如何成为元组的第一个元素的,这与您陈述问题的方式相反。我们合并了 (1,2)(1,4)进入 (1,6) .我们添加是因为我们给出了组合函数 (+) .

这一功能解决了您的问题——其余的只是一个小小的管道,我将留给您。

关于haskell - 添加元组的第一个元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16856110/

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