Elixir 新特性 Map

更新于 2014-04-30  约 4 分钟

Elixir 0.13后基于Erlang 17增加了新的Map数据结构,要想使用Map, Erlang R17 是要求的最低版本。

Map 基础

Map.new 会创建一个空的map, %{}即是空map

iex(1)> Map.new
%{}

也可以使用 Map.new(pairs), Map.new(list, transform) 创建新的map

Map.new(pairs)

iex> Map.new [{:b, 1}, {:a, 2}]
%{a: 2, b: 1}

Map.new(list, transform)

iex> Map.new ["a", "b"], fn x -> {x, x} end
%{"a" => "a", "b" => "b"}

也可以直接用 %{} 创建map

%{ hello: :world, with: :keywords }
%{ :hello => :world, with: :keywords }

map可以以map.key的形式获取value,比如

iex(3)> a = %{ hello: :world, with: :keywords }
%{hello: :world, with: :keywords}
iex(4)> a.hello
:world
iex(5)> a.with
:keywords

api

put(map, key, val) 添加一个键值对

iex(1)> m = %{ hello: :world, with: :keywords }
iex(2)> Map.put(m, :hello1, "world1")
%{hello: :world, hello1: "world1", with: :keywords}

delete(map, key) 删除一个key, 返回新的map

iex(1)> m = %{ hello: :world, with: :keywords }
iex(2)> Map.delete(m, :hello)
%{with: :keywords}

take(dict, keys) 获取某些值,返回新的map

iex(15)> Map.take(m, [:a, :b])
%{a: "world1", b: "world1"}

merge(map1, map2) 合并两个map

iex(1)> m1 = %{hello: "world"}
%{hello: "world"}
iex(2)> m1
%{hello: "world"}
iex(3)> m2 = %{hello1: "world1"}
%{hello1: "world1"}
iex(4)> m2
%{hello1: "world1"}
iex(5)> m3 = Map.merge(m1, m2)
%{hello: "world", hello1: "world1"}

参考:

阅读 2.2k更新于 2014-04-30

推荐阅读
lidashuang's note
用户专栏

Happy Hacking

11 人关注
63 篇文章
专栏主页
目录