日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字典:散列表、散列字典、关键字列表、集合与结构体

發布時間:2023/11/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字典:散列表、散列字典、关键字列表、集合与结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字典

  散列表和散列字典都實現了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] #=>"Dallas"hashdict = 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 badge"end end

  

  散列表實現了Access協議,所以可以使用 [] 訪問。我們可以給結構體添加這個功能。

defmodule Attendee do@derive 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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的字典:散列表、散列字典、关键字列表、集合与结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。