转换为关键字列表

iex(32)> Map.to_list(%{one: 1, two: 2})
[one: 1, two: 2]

转换为结构

通过一个Map来构造一个Struct

# 首先定义结构
defmodule User do
  defstruct username: nil, mail: nil
end

# 其次调用`Kernal.struct/2`构造一个结构
struct(User, %{
    name: "segmentfault", 
    mail: "segmentfault@163.com"
})

模式匹配

iex(7)> %{name: name, mail: mail} = %{name: "segmentfault", mail: "segmentfault@163.com"}
%{mail: "segmentfault@163.com", name: "segmentfault"}

iex(8)> name
"segmentfault"

iex(9)> mail
"segmentfault@163.com"

匹配不存在的key

iex(10)> %{name: name, tel: tel} = %{name: "segmentfault", mail: "segmentfault@163.com"}  
** (MatchError) no match of right hand side value: %{mail: "segmentfault@163.com", name: "segmentfault"}

Map 语法

# 空Map
%{}

# Map箭头语法
%{"name" => "segmentfault", "mail" => "segmentfault@163.com"}

# 当所有key为原子的简写形式
# 注意冒号后面一定要有一个空格
%{name: "segmentfault", mail: "segmentfault@163.com"}

计算一个Map的大小

iex(10)> map = %{name: "segmentfault", mail: "segmentfault@163.com"}                      
%{mail: "segmentfault@163.com", name: "segmentfault"}
iex(11)> map_size(map)
2

参考: Kernel.map_size/1

更新一个Map的值

iex(16)> map = %{name: "segmentfault", mail: "segmentfault@163.com"}
%{mail: "segmentfault@163.com", name: "segmentfault"}

iex(17)> %{map | name: "new"}                                                                        
%{mail: "segmentfault@163.com", name: "new"}

developerworks
1.7k 声望266 粉丝

引用和评论

0 条评论