haskell - 使用“键”从 fromList 创建新的 fromList
问题描述
试图找出解决这个问题的方法..
假设我有 x = fromList[("a", 1), ("b", 2), ("c", 3)]
并有一个列表 ["a", "a", "b", "c" , "c"]
我怎么会考虑生产类似的东西..
Map.fromList[("a", 2), ("b", 2), ("c", 6)]
任何朝着正确方向的帮助将不胜感激
解决方案
我从KA Buhr 评论中的假设开始,即您希望获得原始哈希中的计数与源自输入列表的哈希的乘积。
为此,我们需要一个occurrences
将字符串列表转换为从字符串到出现次数的哈希的函数。这可以使用insertWith
函数轻松完成,如果存储值存在,则使用给定操作将要插入的值与存储值结合起来,否则只插入。
为了将出现次数与现有散列相乘,我们使用unionWith
函数,其工作方式类似于insertWith
如果元素同时存在于散列中或仅插入,则使用给定操作形成联合。
{-# OPTIONS_GHC -Wall #-}
import Data.Map
x :: Map String Int
x = fromList [("a", 1), ("b", 2), ("c", 3)]
occurrences :: Ord k => [k] -> Map k Int
occurrences l = aux l empty
where
aux [] h = h
aux (a:as) h = aux as $ insertWith (+) a 1 h
main :: IO ()
main = print $ unionWith (*) x $ occurrences ["a", "a", "b", "c", "c"]
推荐阅读
- android - 如何修复“任务 ':app:processDebugResources' 执行失败。> Android 资源链接失败”[Android/Flutter]
- javascript - 包含对象数组和字符串数组的对象
- sas - 在 SAS 中:当组内缺失值的数量超过非缺失值时,按组对值进行标准化
- keras - Keras flow_from_directory limiting number of examples
- r - How to assign values in new column based on condition in another column using if and non-if functions in R
- forms - 为什么这不是 CORS 请求?
- md5 - 使用 https POST 进行交易,但不明白如何在我的代码中从 MD5 转换到 transHashSHA2
- python - 基于蒙版将 2 个图像加在一起
- batch-file - Jenkins 声明式管道:如何在 Windows bat 命令中使用传递给函数的参数?
- reactjs - 反应:意外的令牌,预期的“,”