【问题标题】:Count the number of occurences of each element and return them as a list of tuples计算每个元素的出现次数并将它们作为元组列表返回
【发布时间】:2022-01-15 15:46:57
【问题描述】:

我必须编写elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)],它应该计算列表中每个元素的出现次数,并在元组列表中返回元素和结果。

例如:

elemFreqByFirstOcc "adbcba" == [('a',2),('d',1),('b',2),('c',1)]

elemFreqByFirstOcc [1,2,1,3,3,2,1,4,3,2,1,1,1,4,6,5] == [(1,6),(2,3 ),(3,3),(4,2),(6,1),(5,1)]

到目前为止,我有这段代码,如果列表中的所有元素只显示一次,它就可以正常工作,但是当一个元素出现更多次时,它们每次都会被计算在内。 (所以对于第一个例子,它返回[('a',2),('d',1),('b',2),('c',1),('b',1),('a',1)]

elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]
elemFreqByFirstOcc [] = []
elemFreqByFirstOcc [x] = [(x, 1)]
elemFreqByFirstOcc (x:xs) = zip [x] [(length $ filter (==x) (x:xs))] ++ elemFreqByFirstOcc xs

【问题讨论】:

    标签: haskell tuples unique


    【解决方案1】:

    你需要过滤掉你已经统计过的项目,所以:

    elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]
    elemFreqByFirstOcc [] = []
    elemFreqByFirstOcc (x:xs) = (x, length (filter (x ==) xs) + 1) : elemFreqByFirstOcc (filter (x /=) xs)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多