Julia-基本データ構造

10360 ワード

予知
この文章をご覧になれて嬉しいですが、時間を無駄にしないように、事前にお知らせしなければなりません.
これはただ私の学習ノートで、非常に浅くて乱れていて、深く浅くなくて、未来も更新し続けるかどうか分かりません.この文章はあなたが閲覧したり時間をつぶしたりするのに適しています.内容は大体順番に読むのに適しています.必要に応じて、私に連絡してください.
Juliaに含まれる基本的なデータ構造は次のとおりです.ここでは、次の順序で説明します.
  • ユニット
  • 辞書
  • 配列
  • メタグループ
    秩序ある要素の集合を括弧で囲んでメタグループを生成し、真ん中をカンマで区切って、基本的な使い方はPythonと変わらない.
    Syntax:
    (item1, item2, ...)
    

    例は次のとおりです.
    myfavoriteanimals = ("penguins", "cats", "sugargliders")
    # ("penguins", "cats", "sugargliders")
    
    myfavoriteanimals[1] 
    # "penguins"
    
    myfavoriteanimals[1] = "otters" #        ,      
    # ERROR: MethodError: no method matching setindex!(::Tuple{String,String,String}, ::String, ::Int64)
    

    Pythonとは異なり、Juliaは(1.0バージョン以上)拡張され、メタグループのコンポーネントに名前を付けることができます.
    myfavoriteanimals = (bird = "penguins", mammal = "cats", marsupial = "sugargliders")
    # (bird = "penguins", mammal = "cats", marsupial = "sugargliders")
    
    myfavoriteanimals[1] 
    # "penguins"
    
    myfavoriteanimals.bird
    # "penguins"
    

    辞書
    辞書を作成するには、Dict()関数を内蔵する必要があります.関数のパラメータは、空またはキー値ペアであってもよく、キー値ペアは矢印記号=>を使用して関連付ける必要があります.
    Syntax:
    Dict(key1 => value1, key2 => value2, ...)
    

    例は次のとおりです.
    myphonebook = Dict("Jenny" => "867-5309", "Ghostbusters" => "555-2368")
    # Dict{String,String} with 2 entries:
    #   "Jenny"        => "867-5309"
    #   "Ghostbusters" => "555-2368"
    
    myphonebook["Jenny"]
    # "867-5309"
    
    myphonebook["Kramer"] = "555-FILK"
    # "555-FILK"
    
    myphonebook
    # Dict{String,String} with 3 entries:
    #   "Jenny"        => "867-5309"
    #   "Kramer"       => "555-FILK"
    #   "Ghostbusters" => "555-2368"
    

    キーKramerを辞書から削除し、キーKramerに対応する値を返します.
    pop!(myphonebook, "Kramer")
    # "555-FILK"
    
    myphonebook
    # Dict{String,String} with 2 entries:
    #   "Jenny"        => "867-5309"
    #   "Ghostbusters" => "555-2368"
    

    メタグループと配列とは異なり、辞書の要素には前後の区別がなく、数字でインデックスできません.次の例では、Juliaがキーを「1」にしようとしたときの値を示します.
    myphonebook[1]
    # KeyError: key 1 not found
    

    はいれつ
    配列とメタグループには順序付きの集合が含まれていますが、配列は更新できます.中括弧で配列とメタグループを区別します.基本的な使い方はPythonと同じです.
    Syntax:
    [item1, item2, ...]
    
    myfriends = ["Ted", "Robyn", "Barney", "Lily", "Marshall"]
    # 5-element Array{String,1}:
    #  "Ted"
    #  "Robyn"
    #  "Barney"
    #  "Lily"
    #  "Marshall"
    

    プロンプトに戻る:
  • 5-elementは配列内の要素の総数が5
  • であることを示す.
  • Array{String,1}は現在配列
  • であることを示す.
  • Stringは、配列内の各要素がString型であることを示し、配列に複数のデータ型がある場合、any
  • が表示される.
  • 1はこれが1次元ベクトルであることを示しており、2次元マトリクスであればArray{String,2}、3次元はArray{String,3}である.このように、Juliaは多次元配列の次元情報を示す点でPythonよりも分かりやすく、後続に見ることができる.

  • JuliaにはPythonとは全然違うところがたくさんあります.例えば、1からインデックスを始めると、後で面倒が少なくなるかもしれませんが、誰が知っていますか.あなたは知っています.
    myfriends[0]
    # ERROR: BoundsError: attempt to access 5-element Array{String,1} at index [0]
    
    myfriends[1]
    # "Ted"
    

    例えば、数字配列に文字列を追加し、Pythonで簡単にできます.
    a = [1,2,3]
    a.append("1")
    print(a)
    # [1, 2, 3, '1']
    

    しかし、Juliaでは、文字列配列myfriendsに数字を挿入すると、エラーが発生します.
    push!(myfriends, 1)
    # ERROR: MethodError: Cannot `convert` an object of type Int64 to an object of type String
    

    しかし、最初から要素がAnyの配列を新規作成すると、任意のタイプの挿入が完了します.
    a = [1,2,3,"3"]
    # 4-element Array{Any,1}:
    #  1
    #  2
    #  3
    # "3"
    
    pop!(a) 
    # "3"
    
    a #    ,              Any       
    # 3-element Array{Any,1}:
    #  1
    #  2
    #  3
    
    push!(a, "1")
    # 5-element Array{Any,1}:
    #  1 
    #  2
    #  3
    # "1"
    

    Juliaの配列の次元情報はPythonよりも多く、次の2次元配列を作成します.
    favorites = [["koobideh", "chocolate", "eggs"],["penguins", "cats", "sugargliders"]]
    # 2-element Array{Array{String,1},1}:
    #  ["koobideh", "chocolate", "eggs"]
    #  ["penguins", "cats", "sugargliders"]
    
  • 外層の2-element Array{...}は、最も外側の層が2つの元素を含むことを示し、含まれる元素はいずれもArray{String,1}タイプであり、1は最も外側の次元が1であることを示す.
  • では、外層に含まれる各要素はArray{String,1}タイプであり、1はそれらが1次元ベクトルであることを示し、要素の個数は知られていないが、要素タイプはStringである.
  • numbers = [[[1], [2], [3]], [[4], [5]]]
    # 2-element Array{Array{Array{Int64,1},1},1}:
    #  [[1], [2], [3]]
    #  [[4], [5]]
    

    上記の例では、各次元内の要素の個数が同じである必要はない3 D配列を示しています.juliaはPythonと同様、デフォルトでは浅いコピーですが、深いコピーを行うには、内蔵のcopy関数を直接使用します.
    a = [1,2,3]
    # 3-element Array{Int64,1}:
    #  1
    #  2
    #  3
     
    b = a #    
    # 3-element Array{Int64,1}:
    #  1
    #  2
    #  3
     
    b[1] = 111
    #  111
     
    a,b
    # ([111, 2, 3], [111, 2, 3])
       
    c = copy(a) #    
    # 3-element Array{Int64,1}:
    #  111
    #    2
    #    3
       
    c[1] = 1
    # 1
    
    a, b ,c
    # ([111, 2, 3], [111, 2, 3], [1, 2, 3])
    

    以上がJuliaの基本的なデータ構造です.
    転載先:https://juejin.im/post/5b78d6e3f265da43741e0b55