我想在Haskell中创建一个HashTable,在里面插入散列值,然后在这个HashTable中查找。
我找到了这个documentation ,但我刚启动Haskell,因此我真的不知道如何使用这些函数。
如果你们中的一些人能给我看几行代码,那就太好了。
发布于 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.lookup
、M.insert
和许多其他函数来修改/查询地图。这种数据结构也是纯粹的功能性/持久性的(注意IO在类型中是如何存在的)。这意味着我们可以做像这样的事情
let newMap = M.insert key val oldMap
in M.union oldMap otherMap
看看我们如何仍然可以使用旧版本的地图,即使在插入一些东西之后?这就是“持久性”,我们永远不会破坏旧版本的数据结构。
发布于 2013-12-10 23:43:52
为了避免有人说haskell社区傲慢,这里是您需要的第一个函数的简短分解:
new :: (key -> key -> Bool) -> (key -> Int32) -> IO (HashTable key val)
这告诉我们:要为特定的键类型key
创建HashTable,您需要传递一个检查键是否相等的函数,以及一个计算键的散列值的函数。因此,如果eq
和hashit
是所需的函数,则如下所示:
new eq hashit
在IO-Monad中显示一个空的HashTable。
一种更简单的方法是使用预定义的散列函数之一从列表创建HashTable:
fromList hashInt [(42, "forty-two"), (0, "zero")]
https://stackoverflow.com/questions/20498501
复制相似问题