【问题标题】:counting number of times a key is in map计算键在地图中的次数
【发布时间】:2021-12-31 14:30:19
【问题描述】:

我有以下代码:

type Film = (Fan, Title, Review)
filmRating :: [Film] -> [(Fan, Int)]
filmRating l = undefined

我希望能够给出一个清单:

[("fan1", "film1", 3), ("fan1", "film2", 3), ("fan3", "film1", 5), ("fan4", "film3", 8 )]

现在,该功能要我列出粉丝观看了多少部电影的列表。所以有了上面的列表,我应该得到:

[("fan1", 2). ("fan3", 1), ("fan4", 1)]

我需要使用地图和设置,所以我最终得到了这个

titlesFan :: (Ord k, Ord a) => [(k, a, c)] -> [(k, [a])]
titlesFan l = Map.fromListWith (++) [(f, [t]) | (f, t, _) <- l]

我似乎无法获得长度,因为它只给出 1

【问题讨论】:

  • [("fan1",["film2","film1"]),("fan3",["film1"]),("fan4",["film3"])] 的输入结果上运行titlesFan。你到底是怎么打电话给length来得到1的?
  • @JosephSible-ReinstateMonica 可能是map length...

标签: list dictionary haskell


【解决方案1】:

一对中的length 总是1*

> length (False, "abc")
1

可能这就是发生在你身上的事情,不小心。相反,请求元组第二部分的length

> length . snd $ (False, "abc")
3

* 如果您将(Bool, String) 视为Strings 的容器,那么很明显,该容器中始终只有一个String,这证明了这一结果。当然,您是否认为 (Bool, String)Strings 的容器的想法完全是另一回事......

【讨论】:

  • 但事情是我想要类似 (False, 3)
  • @Montye 一旦你知道你做错了什么,我想你可以弄清楚如何做对。我相信你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多