You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell使用Map统计影迷观影次数 统计长度恒返回1问题求助

问题原因

  1. 你当前写的titlesFan函数类型签名和实际返回值不匹配:Map.fromListWith返回的是Map映射结构而非列表,需要调用Map.toList才能转为你声明的[(k, [a])]类型。
  2. 你统计长度得到全1的核心原因是没有正确对每个影迷对应的观影列表求长度,大概率是误对映射转列表后的外层元素做了计数,而非取每个键对应的值(观影列表)计算长度。

解决代码

首先需要导入依赖的模块:

import qualified Data.Map as Map
import qualified Data.Set as Set -- 如果需要去重统计观影部数则导入

版本1:统计总观影次数(同一影迷看同一部电影多次算多次)

完全符合你的示例输出要求,仅用Map实现:

type Fan = String
type Title = String
type Review = Int
type Film = (Fan, Title, Review)

filmRating :: [Film] -> [(Fan, Int)]
filmRating l = Map.toList $ Map.map length $ Map.fromListWith (++) [(f, [t]) | (f, t, _) <- l]

版本2:统计观影部数(同一影迷看同一部电影多次仅算1次,用到Set实现)

符合要求同时使用Map和Set的场景:

filmRating :: [Film] -> [(Fan, Int)]
filmRating l = Map.toList $ Map.map Set.size $ Map.fromListWith Set.union [(f, Set.singleton t) | (f, t, _) <- l]

内容的提问来源于stack exchange,提问作者user17468100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:02