计算字符串列表中的字符串并将其转换为像[(String,int)] |这样的元组哈斯克尔

时间:2014-11-11 15:57:30

标签: haskell tuples

我的问题是如何实现这个:

import Data.Char
import Data.List

freq :: [String] -> [(String ,Int)]
freq words = []

在Haskell。我想计算特定字符串在字符串列表中出现的次数。

3 个答案:

答案 0 :(得分:1)

实现这一目标的方法是:

  1. 对列表进行排序
  2. 将连续的相等元素累积到组中。
  3. 计算每组的长度。
  4. 使用的函数是来自sort的{​​{1}}和group

    Data.List

    sort :: Ord a => [a] -> [a] group :: Eq a => [a] -> [[a]] 的工作原理示例:

    group

    所以现在你必须将一组相同的元素(如group [1,1,1,2,3,3,4] -> [ [1,1,1], [2], [3,3], [4] ] )转换为元组[1,1,1]。我会留下那个让你弄明白的。

    (1,3)的完整定义如下:

    freq

答案 1 :(得分:0)

如评论中所述,使用Data.Map

freq :: [String] -> [(String ,Int)]
freq words = toList $ fromListWith (+) [(w, 1) | w <- words]

答案 2 :(得分:0)

https://www.haskell.org/hoogle可能是你的朋友。您可能希望使用类型为签名[a] -> a -> Int的函数。在hoogeling之后你会立即找到:

elemIndices :: Eq a => a -> [a] -> [Int] base Data.List The elemIndices function extends elemIndex, by returning the indices of all elements equal to the query element, in ascending order.