や、言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としてのを学んでいく。
前回
2. Juliaの言語機能
2.5 コレクション
コレクションは一連のデータを格納する型あるいはオブジェクトを指す。ここではに標準で用意されている主要なコレクションについて説明する。
では慣用的に関数名の最後に!を付与すると、引数のすべてまたは一部を変更または破棄することを意味する。なコレクションでは要素を追加・削除する機能があるため、関数名の末尾には!を付与する場合がある。
2.5.1 タプル
タプルは複数のオブジェクトをまとめておくデータ構造である。型のオブジェクトの要素はで始まるインデックスでアクセスする。タプルはであるため、値を変更できない。
タプルはたとえば型のサイズを表現するのに用いる。実際、行列のサイズを取る関数の出力はタプルである。
############## ### タプル ### ############## # タプルの生成 t = (1,2,3) # 型のチェック println(typeof(t)) # 要素へのアクセス println(t[1]) try t[1] = 4 catch println("One cannot rewrite any elements in a tuple!") finally println(t[1]) end ### タプルはたとえばArray型のサイズとして用いられる array = rand(4,3) s = size(array) println(typeof(s)) ### また関数の可変長引数もタプルである f(x...) = x y = f(1,2,3) println(y) println(typeof(y))
2.5.2 名前付きタプル
各要素に名前を付けることができるタプルを名前付きタプルという。
### 名前付きタプルへのアクセス named_tuple = (a = 1, b = 2) println(named_tuple) println(typeof(named_tuple)) # 要素にアクセス println(named_tuple.a) println(named_tuple[1]) println(named_tuple[:a]) # キーと値の取得 println(keys(named_tuple)) println(values(named_tuple))
2.5.3 リスト
ここでは系列データを格納し値の追加や削除ができるコレクションを指してリストと呼ぶ。では1次元の型をリストとして用いる。値の追加や削除には、およびなどを用いる。
############## ### リスト ### ############## # リストの定義 list = [] list = [1,2] # リストに値を加える push!(list,3) println("リストの追加:",list) # 末尾の要素を取り出す println("末尾の要素を取り出す:",pop!(list)) # i番目に要素を挿入する insert!(list,2,4) # 第1引数のリストの第2引数の場所に第3引数を追加する println("i番目に要素を追加する:",list) # i番目の要素を削除する deleteat!(list,2) println("i番目の要素を削除する:",list)
2.5.4 辞書
辞書はキーと値のペアを格納するコレクションである。基本的にはという形式で宣言する。過去のVer.ではの部分の型宣言を省略可能なことがあったものの、では省略不可能になっていた。
############ ### 辞書 ### ############ # 定義方法 d = Dict{String, Int64}() d["a"] = 1; d["b"] = 2 println(d) # 2つ目の型指定を省略すると、Anyでしたことになる # => テスト環境(Julia 1.8.0)では省略不可 try d2 = Dict{String}() catch println("第2引数は省略できません。") d2 = Dict{String,Any}() d2["a"] = 1; d2["b"] = 2 end println(d2) println("") println("**********************") println("") # 値へのアクセス:基本的にキーを用いる println("値へのアクセス方法1:",d["a"]) try println("値へのアクセス方法2":d["c"]) catch println("キーにない値でアクセスするとエラーを返す") end try println("値へのアクセス方法2":d[1]) catch println("インデックス(番号)でのアクセスはできない") end # 値の書き換え d["a"] = 5 println(d) # キーとしてある文字列の有無はhaskey()で検索可能 println("aの有無:",haskey(d,"a")) println("cの有無:",haskey(d,"c"))
2.5.5 集合
キーのみを保持する辞書を集合という。データからユニークな要素のみを取り出したり、その数を数えるのに頻用される。
############ ### 集合 ### ############ # 集合の定義 s = Set([1,2]) # リストをSet()の引数として与える typeof(s) println("") println("**********************") println("") # 値を加える println("初期状態:",s) push!(s,3) # あるスカラーを加える println("元に3を追加:",s) s = union(s, Set([4,5])) # 和集合を取る println("[4,5]との和集合:",s) # 古い書き方ではunion(s, Set([4,5]))とすれば勝手にs = union(s, Set([4,5]))となっていた # 今はしっかりとs = と値を渡してやること println("") println("**********************") println("") # 共通部分 s = intersect(s, [3,4]) println("[3,4]との共通部分:",s)
2.5.6 コレクション共通の関数
多くのコレクションに共通で使える関数がある:
関数 |
戻り値の型 |
概要 |
|
---|---|---|---|
コレクションが空か否か | |||
コレクションを空にする | |||
コレクションの要素数 | |||
コレクションの型パラメータ |
2.5.7 コレクションのイテレータ
コレクションの要素は文で1つずつ順番に列挙できる。
xs = [1,2,3,4,5] i = 0 for x in xs i += 1 println("xsの",i,"番目の値は",x) end