サーチ…


構築

次のようなタプルのリストからMapを作成することができます:

Map.fromList [("Alex", 31), ("Bob", 22)]

マップは単一の値で構築することもできます:

> Map.singleton "Alex" 31
fromList [("Alex",31)]

empty関数もあります。

empty :: Map k a

Data.Mapは、 uniondifferenceintersectionなどの一般的な集合操作もサポートしています。

空の場合のチェック

null関数を使用して、指定されたMapが空であるかどうかを確認します。

> Map.null $ Map.fromList [("Alex", 31), ("Bob", 22)]
False

> Map.null $ Map.empty
True

価値の発見

マップには多くのクエリ操作があります。

member :: Ord k => k -> Map ka -> Boolは、 k型のキーがMap ka場合にTrue member :: Ord k => k -> Map ka -> Boolます。

> Map.member "Alex" $ Map.singleton "Alex" 31
True
> Map.member "Jenny" $ Map.empty
False

notMemberも同様です:

> Map.notMember "Alex" $ Map.singleton "Alex" 31
False
> Map.notMember "Jenny" $ Map.empty
True

キーが存在しない場合、 findWithDefault :: Ord k => a -> k -> Map ka -> aを使用してデフォルト値を得ることもできます:

Map.findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x'
Map.findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a'

要素を挿入する

要素を挿入するのは簡単です:

> let m = Map.singleton "Alex" 31
fromList [("Alex",31)]

> Map.insert "Bob" 99 m
fromList [("Alex",31),("Bob",99)]

要素の削除

> let m = Map.fromList [("Alex", 31), ("Bob", 99)]
fromList [("Alex",31),("Bob",99)]

> Map.delete "Bob" m
fromList [("Alex",31)]

モジュールのインポート

containersパッケージData.Mapモジュールは、厳密実装と遅延実装の両方を持つMap構造体を提供します。

Data.Mapを使用するData.Map 、通常Preludeで定義されている関数との衝突を避けるために、 Data.Mapインポートします。

import qualified Data.Map as Map

そこでMap関数呼び出しの前にMapを追加しMap. 、例えば

Map.empty -- give me an empty Map

モノイドインスタンス

Map kvは以下のセマンティクスを持つMonoidインスタンスを提供します:

  • memptyは空のMap 。つまり、 Map.emptyと同じMap.empty
  • m1 <> m2m1m2の左偏った和集合です。つまり、いずれかのキーがm1m2両方に存在する場合、 m1からの値がm1 m1 <> m2ます。この操作は、外にも利用可能であるMonoidとしてインスタンスMap.union


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow