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 tomma Map , dvs. samma som Map.empty
  • m1 <> m2 är den vänster partiska föreningen för m1 och m2 , dvs om någon nyckel finns både i m1 och m2 , väljs värdet från m1 för m1 <> m2 . Denna operation är också tillgänglig utanför Monoid instansen som Map.union .


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow