辞書:ハッシュハッシュ辞書、キーワードリスト、セット、および構造

辞書

  ハッシュテーブルや辞書は、辞書です行動のハッシュを達成しています。キーワードモジュールは、基本的には重複するキーをサポートしていることを除いて、実装しています。

  コレクションEunm.intoマッピングの1つのタイプは別のものに変換することができます。

defmodule合計は何
    DEF値(辞書)を行う
        辞書 > Dict.values | |> Enum.sum
     


HD = [1:1、2:2、3:3] |> Enum.into HashDict.new 
IO.puts合計。値(HD)# => 6

  辞書関連のAPI

kw_list = [名: "デーブ"が好き: "プログラミング"、 "ダラス" ] 
hashdict = Enum.into kw_list、HashDixt.new 
マップ = Enum.into kw_list、Map.new 

kw_list [:名]# =>を」デーブ" 
hashdictの[:好き]# => "プログラミング" 
にマップ[:]# => "ダラス" 

hashdict = Dict.drop(hashdict、[:どこ、:好き])#=> HashDict <[名前:"デイブ"]> 
hashdict = Dict.put(hashdict:also_likes、"ルビー)#=> HashDict <名称: "デイブ"、also_likes: "ルビー"]> 
コンボ= Dict.merge(マップ、hashdict)#合并=> %{also_likes: "ルビー"は、好き:「プログラミング」、名称:「デイブ」、「ダラス」}

  例:

人= [
    %{名: "気難しい、高さ:1.24}、
    %{名:"デイブ"高さ:1.88 }、
    %{名:"まぬけ"高さ:1.32 }、
    %{名:"シャキール」、高さ:2.16の}、
    %{名: "sneezy"、高さ:1.28 } 
    ] 
の人のために = {%高さ:高さ} < - 人、人と結合した#ハッシュテーブルのリスト、および結合高さの値の高さ
    高さ > 1.5 、#選択された高さ1.5以上
    の操作を行います。IO.inspect人    

  例2:

デフブック(%{名:名前、高さ:高さ})
の高さ> 1.9 やる
    ... エンド
デフブック({名:名前、高さ:高さ})
高さ<1.3 やる
    ... エンド
デフブック(人)を行う
    ... エンド
人々 |> Enum.each(&HotelRoom.book / 1)





 

ハッシュテーブルを更新します。

  new_map =%{old_map |キー=>値、...}、古いハッシュリストのコピーですが、右キー、パイプライン演算子対応する値で更新される新しいハッシュテーブルを作成します。

M =%{:. 1、B:2、C :. 3 } 
M1 =%{M | B: "TWO"、C: "三"}#1%{:. 1、B: "TWO、C:"スリー「} 
    新しいキーが必要とされてDict.put_new / 3機能を追加する#

 

構造

  構造体は、ハッシュテーブルの制限された形式をカプセル化するモジュールです。結合は、原子でなければならないので、それは限られており、ハッシュテーブルは、特性およびアクセスDictのを持っていません。ハッシュテーブルの性質を定義するdefstructを使用してください。

  ハッシュテーブルは同じですが、構造は、デフォルトパラメータを持っているために使用する構造は同じです。

サブスクライバのdefmoduleを行う
    defstruct名: ""、有料:falseに、over_18:真の
エンド

S1は =%を加入者の{}#=>%を加入者の{名前: ""、over_18を:trueに:、有料falseに} 
S2 =%加入者{名「メアリー「有料:trueに }#=>%サブスクライバ{名:」メリー」、over_18:trueに、有料:trueに} 

一致する
アクセスキーでマークs2.name#ポイントアトミックである必要があり、一貫性のある特徴的な構造
%サブスクライバ{名前:a_name} = S3 
a_name# => "メアリー" 

更新
S3 =%加入{S2 |名 : "マリー"}

  例:

defmodule出席者のない
    defstruct名: ""、支払った:、over_18:

    デフmay_attend_after_party(出席者 =%の出席者は、{})#函数参数使用%出席者{}接受结构体行い
        attendee.paid && attendee.over_18
     終了

    print_vip_badge DEF( を出席者{名前:名})名= ""!
        IO.putsは "非常に安いバッジは#{name}のために、"
     終了
    デフprint_vip_bage( 出席者{})FO 
        昇給 "バッジ"の名前を欠落している
     エンド・エンド
      

  

  アクセスプロトコルは、ハッシュテーブルを実装して、あなたは[]アクセスを使用することができます。私たちは、構造体にこの機能を追加することができます。

defmodule出席者が行う
    @deriveアクセス
    defstruct名: ""、over_18:


A =%の参加者{名: "サリー"、over_18:} 
[:名]# =>「サリー

 

ネストされた辞書構造

  辞書の種類は、これらの値に関連付けられたキーと値自体はまた、辞書型であってもよいことができます。

お客様defmoduleください
    :defstruct名 ""、会社: ""
 終了

バグ報告defmodule行う
    defstruct所有者:%{}、詳細: ""、Serverity :. 1
 エンド


レポート =%バグレポート{所有者:%お客様の{名: "デーブ"、会社を: "Pragati"}、詳細: "壊れた" } 

#アクセス
report.owner.companyの

#更新 / 変更
報告書 = {%バグ報告レポート|オーナー:%お客様report.owner {|会社: "PragProg" }} 

#put_inを提供することができます内部の値入れ子構造
put_in(report.owner.company、「PargProg」

#update_inは、私たちは、構造上の特定の値で機能を実行することができます
update_in(report.owner.name、 &( "ミスター" <>&1))#接続 "ミスター" と名前

 

おすすめ

転載: www.cnblogs.com/lr1402585172/p/11498408.html