Eli*_*lik 10 haskell hashtable
我是Haskell的新手,我需要定义一个空的Data.map,并通过使用insert函数并更新值来为其键分配一个"整数列表"(例如[1,2,3]).然后查找关键值.
到目前为止我尝试过的是:
import qualified Data.Map
foo num =
    let
        my_map  = Data.Map.empty
        new_map = bar my_map  num 1
    in
        Data.Map.lookup 1 new_map
bar my_map num c =
    if c > num then my_map
    else
        Data.Map.insert  c  [c] my_map
        bar my_map  num  c+1
此代码不起作用.
你能举个简单的例子吗?
Lui*_*las 23
人们通常Data.Map使用此样板导入模块:
import Data.Map (Map)
import qualified Data.Map as Map
我们的想法是,由于模块中的许多名称Prelude与其他模块发生冲突,因此您希望将它们用作限定名称,而不是Map类型本身.而as Map在第二线位不必类型可以节省你很多,你刚才说什么Map.map,Map.empty等等.
现在,构建映射的最简单和最常用的方法是使用fromList模块中的函数.这构造了Map一个键/值对列表:Map.fromList :: Ord k => [(k, v)] -> Map k v.要构造这个键/值对列表,您可以使用Haskell列表处理函数的全部功能,如下例所示:
myMap :: Integer -> Map Integer [Integer]
myMap n = Map.fromList (map makePair [1..n])
    where makePair x = (x, [x])
GHCI的示例输出:
>>> myMap 3
fromList [(1,[1]),(2,[2]),(3,[3])]
请注意,Map类型甚至将自身打印为fromList可重构它的调用.为什么?因为这个函数真的是构建一个最常用的方法Map.
相比之下,你在代码中所做的是你正在尝试编写一个命令式循环,它一次一个地增加一个条目的初始空映射.Haskell等价的循环是列表函数.在我的版本中,我使用了以下内容:
[1..n]- 生成1最多的整数列表n.map- 为列表的每个元素应用一个函数.Map.fromList- Map从键/值对列表中构建a .为了进一步证明这一点,如果你看一下源代码Map.fromList,它实际上是使用list fold函数定义的.
我建议你:Data.List在你解决之前先研究清单和模块Map.特别是:
foldr模块的功能 - 如何使用它,以及如何编写它.map,filter并find在以下方面foldr.这是一个演示此功能的小程序:
module Main where
import qualified Data.Map as M
main = do
    let emptyMap = M.empty
        mapWithKeys = M.insert 5 "Four" emptyMap
        mapWithKeys' = M.insert 5 "Five" mapWithKeys
    putStrLn $ mapWithKeys' M.! 5
程序将使用键5插入"四",然后将值更新为"五",最后查找并打印它.
| 归档时间: | 
 | 
| 查看次数: | 23505 次 | 
| 最近记录: |