Goal
Elixirの連想データ構造を習得する。
Dev-Environment
OS: Windows8.1
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Erlang: Eshell V6.4, OTP-Version 17.5
Elixir: v1.0.4
Wait a minute
連想データ構造について学びます。
どの言語でも大概存在するデータ構造なので、
使い方を覚えることと注意点の把握で十分ですね。
使い方を覚えることと注意点の把握で十分ですね。
さっさと終わらせましょう。
Index
Associative data structure
|> Keyword lists
|> Maps
|> Dicts
|> Extra
|> Keyword lists
|> Maps
|> Dicts
|> Extra
Keyword lists
キーワードリストについて。
簡単なまとめ・・・
- 2要素のタプルをリストにしたもの
- 最初の要素はアトム
- キーの順序を指定したとおりに保持
- 同じキーを複数回与えられる
- 線形の性能特性である
使い方・・・
iex> list = [{:a, 1},{:b, 2}]
[a: 1, b: 2]
iex> list[:a]
1
変数の値を見てみます。
iex> list
[a: 1, b: 2]
値を束縛した時とは、値が違いますね。
上記のような表示になると言うことは、
以下は等価であると言うこと。
以下は等価であると言うこと。
iex> [a: 1, b: 2] == [{:a, 1}, {:b, 2}]
true
そしてリストであると言うことは・・・
以下のようなことができますね。
以下のようなことができますね。
iex> list = [a: 3] ++ list
[a: 3, a: 1, b: 2]
同じキーがあります。
アクセスするとどちらが取得できるでしょうか?
アクセスするとどちらが取得できるでしょうか?
iex> list[:a]
3
詳しい操作については、ドキュメントを参照すること。
hexdocs - v1.0.5 Elixir Enum
hexdocs - v1.0.5 Elixir List
hexdocs - v1.0.5 Elixir Keyword
hexdocs - v1.0.5 Elixir Enum
hexdocs - v1.0.5 Elixir List
hexdocs - v1.0.5 Elixir Keyword
Maps
マップについて。
簡単なまとめ・・・
- キーバリューストア
- キーはどんな値でもよい
- キーは順番通りにならない
- 同じキーなら最後の要素が優先される
使い方・・・
iex> map = %{:a => 1, "b" => 2}
%{:a => 1, "b" => 2}
iex> map.a
1
iex> map["b"]
2
キーがアトムなら以下のようにも定義できる。
iex> map = %{a: 1, b: 2}
%{a: 1, b: 2}
以前に書いたが、マップでのパターンマッチは非常に柔軟にできる。
iex> map = %{"hoge" => 1, "huge" => 2, "foo" => "bar"}
%{"foo" => "bar", "hoge" => 1, "huge" => 2}
iex> %{"hoge" => hoge} = map
%{"foo" => "bar", "hoge" => 1, "huge" => 2}
iex> hoge
1
空のマップならどんなマップにもマッチする。
iex> %{} = %{"foo" => "bar", "hoge" => 1, "huge" => 2}
%{"foo" => "bar", "hoge" => 1, "huge" => 2}
Dicts
ディクショナリについて。
簡単なまとめ・・・
- ディクショナリはビヘイビア(インターフェース)
Description:
キーワードリスト、マップのどちらもディクショナリと呼ばれる。
その理由は、ディクショナリのビヘイビアを実装して作られているため。
キーワードリスト、マップのどちらもディクショナリと呼ばれる。
その理由は、ディクショナリのビヘイビアを実装して作られているため。
詳しい使い方は、ドキュメントを参照。
hexdocs - v1.0.5 Elixir Dict
hexdocs - v1.0.5 Elixir Dict
こういうのもあるようです。
hexdocs - v1.0.5 Elixir HashDict
hexdocs - v1.0.5 Elixir HashDict
Extra
記事に対して、全く関連性のない話題・・・
関数の引数にデフォルトの値を与える方法。
関数の引数にデフォルトの値を与える方法。
iex上からだとバックスラッシュ使えなかったので、.exファイルを作成します。
ファイル名は何でもいいです。
ファイル名は何でもいいです。
Example:
defmodule Test do
def test1(a \\ 1) do
IO.puts a
end
def test2(b \\ nil) do
IO.puts b
end
end
Description:
引数名 \\ 値
とするとデフォルトの値を与えることができます。
定義したモジュールと関数を使ってみます。
>iex [file_name].ex
iex> Test.test1
1
:ok
iex> Test.test1(2)
2
:ok
iex> Test.test2
:ok
Speaking to oneself
特に難しい点はなかったですね。
次は、ようやっとモジュールについて。
次は、ようやっとモジュールについて。