如何基于元组评分数据统计对所有参评电影评分均相同的影迷列表?
解题思路
- 核心逻辑是按影迷分组统计所有评分,判断每个影迷的评分是否全部相同:只要该影迷的所有评分去重后只有1种(仅参评1部自然满足该条件),即符合要求
- 实现上用
Data.Map做影迷到评分列表的分组映射,用Data.Set做评分去重判断
完整实现代码
import qualified Data.Map as M import qualified Data.Set as S type Fan = String type Film = String type Score = Int -- 输入的参评记录类型 type RatingRecord = (Fan, Film, Score) getConsistentFans :: [RatingRecord] -> [Fan] getConsistentFans records = M.keys $ M.filter isConsistent fanToScores where -- 1. 按影迷分组,收集对应所有评分 fanToScores = M.fromListWith (++) [ (fan, [score]) | (fan, _, score) <- records ] -- 2. 判断是否所有评分一致:转Set去重后元素个数不超过1 isConsistent scores = S.size (S.fromList scores) <= 1
示例测试
输入:
getConsistentFans [("fan1", "f1", 3), ("fan1", "f2", 3), ("fan2", "f1", 5)]
输出:
["fan1","fan2"]
和预期结果完全匹配。
内容的提问来源于stack exchange,提问作者user17468100
相关产品推荐
相关产品推荐

