Skip to content

Commit

Permalink
create ハッシュマップを使う.
Browse files Browse the repository at this point in the history
  • Loading branch information
kayhide committed May 15, 2017
1 parent 3bbef02 commit 2154537
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions コレクション/ハッシュマップを使う.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,40 @@
ハッシュマップを使う
====================

任意のデータをキーとするマップを作りたいことがあります。
`unordered-containers``Data.HashMap`を使うと、`Hashable`をインスタンスにもつデータをキーとするマップを作成できます。

`User`というデータを`email`をキーとして扱うにはこのように書くことができます。

```haskell
-- unordered-containers
import qualified Data.HashMap.Strict as HashMap

-- hashable
import Data.Hashable (Hashable, hashWithSalt)

data User = User { email :: String, name :: String }
deriving (Eq, Show)

instance Hashable User where
hashWithSalt salt user = hashWithSalt salt $ email user
```

`hashable``unordered-containers`の依存パッケージです。

`User``Hashable`インスタンスを定義して`hashWithSalt`を実装しています。
これで`User``HashMap`のキーとして使うことができます。

使ってみましょう。

```haskell
-- unordered-containers
> import qualified Data.HashMap.Strict as HashMap
> alice = User "[email protected]" "Alice"
> bob = User "[email protected]" "Bob"
> users = HashMap.fromList [(alice, "Alice is nice"), (bob, "Bob is great")]
> HashMap.lookup alice users
Just "Alice is nice"
> HashMap.lookup bob users
Just "Bob is great"
```

0 comments on commit 2154537

Please sign in to comment.