在线建站模板,进不去的网站用什么浏览器,四模网站,新北建设局网站字典 散列表和散列字典都实现了Dict的行为。Keyword模块也基本实现了#xff0c;不同之处在于它支持重复键。 Eunm.into可以将一种类型的收集映射转化成另一种。 defmodule Sum dodef values(dict) dodict | Dict.values | Enum.sumend
endhd [ one: 1, two: 2, thre… 字典 散列表和散列字典都实现了Dict的行为。Keyword模块也基本实现了不同之处在于它支持重复键。 Eunm.into可以将一种类型的收集映射转化成另一种。 defmodule Sum dodef values(dict) dodict | Dict.values | Enum.sumend
endhd [ one: 1, two: 2, three: 3 ] | Enum.into HashDict.new
IO.puts Sum.values(hd) #6 Dict相关API kw_list [name: Dave, likes: Programming, where: Dallas]
hashdict Enum.into kw_list, HashDixt.new
map Enum.into kw_list, Map.newkw_list[:name] #Dave
hashdict[:likes] #Programming
map[:where] #Dallashashdict Dict.drop(hashdict, [:where, :likes]) #HashDict[name: Dave]
hashdict Dict.put(hashdict, :also_likes, Ruby) #HashDict[name: Dave, also_likes: Ruby]
combo Dict.merge(map, hashdict) #合并%{also_likes: Ruby, likes: Programming, name: Dave, where: Dallas} 例子 people [%{ name: Grumpy, height: 1.24 },%{ name: Dave, height: 1.88 },%{ name: Dopey, height: 1.32 },%{ name: Shaquille, height: 2.16 },%{ name: Sneezy, height: 1.28 }]
for person %{ height: height } - people, #将列表中的散列表绑定到person 并将高度值绑定到heightheight 1.5, #筛选出高度高于1.5的do: IO.inspect person 例子2 def book(%{name: name, height: height})
when height 1.9 do...
enddef book(%{name: name, height: height})
when height 1.3 do...
enddef book(person) do...
endpeople | Enum.each(HotelRoom.book/1) 更新散列表 new_map %{ old_map | key value, ...}会创建一个新的散列表它是旧散列表的拷贝但是管道运算符右边与键所对应的值会被更新。 m %{ a: 1, b: 2, c: 3 }
m1 %{ m | b: two, c: three } #%{ a: 1, b: two, c: three }#要增加新的键值需要使用Dict.put_new/3函数 结构体 结构体就是模块它封装了一个有限形式的散列表。有限是因为键必须为原子并且这些散列表不具备Dict和Access特性。使用defstruct来定义散列表的性质。 结构体的使用就相当于是散列表一样只不过结构体有默认参数。 defmodule Subscriber dodefstruct name: , paid: false, over_18: true
ends1 %Subscriber{} #%Subscriber{name: , over_18: true, paid: false }
s2 %Subscriber{name: Mary, paid: true} #%Subscriber{name: Mary, over_18: true, paid: true }匹配
s2.name #通过点标记访问键必须为原子符合结构体的特性
%Subscriber{name: a_name} s3
a_name #Mary更新s3 %Subscriber{ s2 | name: Marie } 例子 defmodule Attendee dodefstruct name: , paid: false, over_18: truedef may_attend_after_party(attendee %Attendee{}) do #函数参数使用 %Attendee{} 接受结构体attendee.paid attendee.over_18enddef print_vip_badge(%Attendee{name: name}) when name ! doIO.puts Very cheap badge for #{name}enddef print_vip_bage(%Attendee{}) foraise missing name for badgeend
end 散列表实现了Access协议所以可以使用 [] 访问。我们可以给结构体添加这个功能。 defmodule Attendee doderive Accessdefstruct name: , over_18: false
enda %Attendee{name: Sally, over_18: true}
a[:name] # Sally 嵌套字典结构 字典类型可以让键和值相关联这些值本身也可以是字典类型。 defmodule Customer dodefstruct name: , company:
enddefmodule BugReport dodefstruct owner: %{}, details: , serverity: 1
endreport %BugReport{owner: %Customer{name: Dave, company: Pragmatic}, detail: broken}#访问
report.owner.company#更新/修改
report %BugReport{ report | owner: %Customer{ report.owner | company: PragProg }}#put_in可以设置嵌套结构里面的值
put_in(report.owner.company, PargProg)#update_in可以让我们在结构体上的某一个值上执行一个函数
update_in(report.owner.name, (Mr. 1)) #连接 Mr. 和name 转载于:https://www.cnblogs.com/lr1402585172/p/11498408.html