首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Haskell中创建HashTable

在Haskell中创建HashTable
EN

Stack Overflow用户
提问于 2013-12-10 23:32:24
回答 2查看 6.9K关注 0票数 8

我想在Haskell中创建一个HashTable,在里面插入散列值,然后在这个HashTable中查找。

我找到了这个documentation ,但我刚启动Haskell,因此我真的不知道如何使用这些函数。

如果你们中的一些人能给我看几行代码,那就太好了。

EN

回答 2

Stack Overflow用户

发布于 2013-12-10 23:56:17

作为对Ingo答案的补充,考虑使用纯函数Data.Map

 import qualified Data.Map as M

 myMap :: M.Map Int String
 myMap = M.fromList $ zip [1..10] ['a'..'j']

 insertedMap :: M.Map Int String
 insertedMap = M.insert 11 "fizzbuzz" oldMap

 at11 :: Maybe String
 at11 = M.lookup 11 insertedMap

然后,您可以使用M.lookupM.insert和许多其他函数来修改/查询地图。这种数据结构也是纯粹的功能性/持久性的(注意IO在类型中是如何存在的)。这意味着我们可以做像这样的事情

  let newMap = M.insert key val oldMap
  in M.union oldMap otherMap

看看我们如何仍然可以使用旧版本的地图,即使在插入一些东西之后?这就是“持久性”,我们永远不会破坏旧版本的数据结构。

票数 5
EN

Stack Overflow用户

发布于 2013-12-10 23:43:52

为了避免有人说haskell社区傲慢,这里是您需要的第一个函数的简短分解:

new :: (key -> key -> Bool) -> (key -> Int32) -> IO (HashTable key val)

这告诉我们:要为特定的键类型key创建HashTable,您需要传递一个检查键是否相等的函数,以及一个计算键的散列值的函数。因此,如果eqhashit是所需的函数,则如下所示:

new eq hashit

在IO-Monad中显示一个空的HashTable。

一种更简单的方法是使用预定义的散列函数之一从列表创建HashTable:

 fromList hashInt [(42, "forty-two"), (0, "zero")]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20498501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档