Haskell Language
Behållare - Data.Map
Sök…
konstruera
Vi kan skapa en karta från en lista med tuples som denna:
Map.fromList [("Alex", 31), ("Bob", 22)]
En karta kan också konstrueras med ett enda värde:
> Map.singleton "Alex" 31 fromList [("Alex",31)]
Det finns också den empty
funktionen.
empty :: Map k a
Data.Map stöder också typiska uppsättningar som union
, difference
och intersection
.
Kontrollera om det är tomt
Vi använder null
att kontrollera om en given karta är tom:
> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)] False > Map.null $ Map.empty True
Hitta värden
Det finns många frågefunktioner på kartor.
member :: Ord k => k -> Map ka -> Bool
ger True
om nyckeln till typ k
är i Map ka
:
> Map.member "Alex" $ Map.singleton "Alex" 31 True > Map.member "Jenny" $ Map.empty False
notMember
är liknande:
> Map.notMember "Alex" $ Map.singleton "Alex" 31 False > Map.notMember "Jenny" $ Map.empty True
Du kan också använda findWithDefault :: Ord k => a -> k -> Map ka -> a
att ge ett standardvärde om nyckeln inte finns:
Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'
Infoga element
Att infoga element är enkelt:
> let m = Map.singleton "Alex" 31 fromList [("Alex",31)] > Map.insert "Bob" 99 m fromList [("Alex",31),("Bob",99)]
Ta bort element
> let m = Map.fromList [("Alex", 31), ("Bob", 99)] fromList [("Alex",31),("Bob",99)] > Map.delete "Bob" m fromList [("Alex",31)]
Importera modulen
Data.Map
modulen i containers
ger en Map
som har både strikta och lata implementationer.
När man använder Data.Map
importerar man det vanligtvis för att undvika kollisioner med funktioner som redan definierats i Prelude:
import qualified Data.Map as Map
Så vi skulle sedan bero Map
samtal med Map.
, t.ex
Map.empty -- give me an empty Map
Monoid-instans
Map kv
ger en Monoid- instans med följande semantik:
-
mempty
är den tommaMap
, dvs. samma somMap.empty
-
m1 <> m2
är den vänster partiska föreningen förm1
ochm2
, dvs om någon nyckel finns både im1
ochm2
, väljs värdet frånm1
förm1 <> m2
. Denna operation är också tillgänglig utanförMonoid
instansen somMap.union
.