From 2154537aa01c31461e32494eaee8f00e28ca54cd Mon Sep 17 00:00:00 2001 From: kayhide Date: Mon, 15 May 2017 16:42:58 +0900 Subject: [PATCH] =?UTF-8?q?create=20=E3=83=8F=E3=83=83=E3=82=B7=E3=83=A5?= =?UTF-8?q?=E3=83=9E=E3=83=83=E3=83=97=E3=82=92=E4=BD=BF=E3=81=86.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...27\343\202\222\344\275\277\343\201\206.md" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git "a/\343\202\263\343\203\254\343\202\257\343\202\267\343\203\247\343\203\263/\343\203\217\343\203\203\343\202\267\343\203\245\343\203\236\343\203\203\343\203\227\343\202\222\344\275\277\343\201\206.md" "b/\343\202\263\343\203\254\343\202\257\343\202\267\343\203\247\343\203\263/\343\203\217\343\203\203\343\202\267\343\203\245\343\203\236\343\203\203\343\203\227\343\202\222\344\275\277\343\201\206.md" index eca6108..6a99058 100644 --- "a/\343\202\263\343\203\254\343\202\257\343\202\267\343\203\247\343\203\263/\343\203\217\343\203\203\343\202\267\343\203\245\343\203\236\343\203\203\343\203\227\343\202\222\344\275\277\343\201\206.md" +++ "b/\343\202\263\343\203\254\343\202\257\343\202\267\343\203\247\343\203\263/\343\203\217\343\203\203\343\202\267\343\203\245\343\203\236\343\203\203\343\203\227\343\202\222\344\275\277\343\201\206.md" @@ -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 "alice@hasmail.com" "Alice" +> bob = User "bob@hasmail.com" "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" +```