【发布时间】:2014-03-10 19:32:00
【问题描述】:
我有一个这样的电影数据库:
testDatabase = [("Blade Runner", "Ridley Scott", 1982, [("Amy",6), ("Bill",9), ("Ian",7), ("Kevin",9), ("Emma",4), ("Sam",5), ("Megan",4)]),
("The Fly", "David Cronenberg", 1986, [("Megan",4), ("Fred",7), ("Chris",5), ("Ian",0), ("Amy",5)])]
它包含两部电影的格式:“标题”、“导演”、“年份”、“用户评分”
type UserRating = [(String, Int)]
我有一个名为“displayAllFilms”的函数,它将以格式化字符串显示每部电影。 和一个函数“hasUserRated”,如果用户已评分,则返回 Bool:
hasUserRated :: String -> Film -> Bool
hasUserRated user (_, _, _, userrating)
| elem user (map fst (userrating)) = True
| otherwise = False
如果我这样做:displayAllFilms $ filter (hasUserRated "Amy") database
它将返回所有艾米评分的电影(银翼杀手和苍蝇)
当它找到 Amy 的元组时,我还需要显示评分。
为了解决这个问题,我有一个名为 whatUserRated 的函数:
whatUserRated :: String -> Film -> [Int]
whatUserRated user (_, _, _, userrating)
| elem user (map fst (userrating)) = map snd userrating
我的问题:
我需要将上述函数更改为只返回一个 int,即找到元素 'user' (amy) 的元组中的 'snd' 的 int。 IE 我需要:
WhatUserRated "Amy"(我需要过滤器的结果作为第二个参数)
下面的函数可以让你在上下文中看到它:
userRatedFilms :: String -> Database -> String
userRatedFilms user database = displayAllFilms $ map (whatUserRated "Amy") $ filter (hasUserRated "Amy") testDatabase
到目前为止,上面将返回艾米已评分的电影中的所有评分,
但是,我只想要她的评分。 我希望我已经解释得够多了,我的英语不是很好。
谢谢,
迈克。
【问题讨论】:
标签: haskell