将数据添加到列表

问题描述:

说我有一个列表,我想添加名称和年龄[[String,Int]]到表中,但如果名称已经存在,它会改变年龄。 我该如何去做这个?将数据添加到列表

从技术上讲,这不是功课,因为这是没有像我一直在考虑这个问题,但它会帮助我了解我一直在考虑这个问题的话,我就会把H/W选项卡上

如果我明白你的问题吧,你想要一个功能,即需要一个(String,Int)[(String,Int)]

  • 如果该名称已包含在列表内,只需更新年龄
  • 否则,连接名称列表。

我们在这里使用递归。列表中的每个元素都是通过一种过滤器传递的,它检查列表中每个元素的名称是否相等,直到它相等或者我们到达列表的末尾。在第一种情况下,年龄被改变和列表的其余部分被连接到它,在第二种情况下,我们附上了新的元素列表:

-- This is a type signature. If you don't know what this is, just skip it. 
alterList :: (String,Int) -> [(String,Int)] -> [(String,Int)] 

alterList record [] = [record] -- If the list is empty, add our name 

alterList [email protected](name,age) ([email protected](name',_):xs) 
| name == name' = record : xs  -- If the naame exists, alter and we're done 
| otherwise = x : alterList record xs -- If not, iterate 

然而,这是唯一的好来表示这样的数据作为一个列表,如果你想流它。通常,您可能需要使用Map。它为关键值数据提供了良好的支持,并且具有出色的性能和共享修改后的组件。

+0

它给了我这个错误分析错误输入'=' – Ahsan 2011-03-15 21:28:40

+0

@Ahsan对不起。输入速度太快。如果您对我的功能有任何疑问,请询问我。 – fuz 2011-03-15 21:33:05

+0

抱歉,它现在显示此错误无法匹配预期类型'[(String,Int)]' 针对推断类型'(String,Int)' 在表达式中:记录 在alterList的定义中:alterList记录[] =记录 – Ahsan 2011-03-15 21:49:19