logo

ジュリアで構造体の属性を確認する方法 📂ジュリア

ジュリアで構造体の属性を確認する方法

コード

propertynames()

propertynames()関数で確認するといい1。Juliaにはクラスがなく、構造体だけが存在するから2、この関数で返されるすべてのシンボルは、正確にプロパティだけの名前ということになる。

次はGraphsパッケージでエルデシュ-レニィネットワークを生成し、ノードの数と各ノードのネイバーフッドを確認するコードである。このネットワークにpropertynames()関数を適用し、:nefadjlistというプロパティがシンボルとして返された。

julia> using Graphs

julia> G_nm = erdos_renyi(50,200)
{50, 200} undirected simple Int64 graph

julia> propertynames(G_nm)
(:ne, :fadjlist)

julia> G_nm.ne
200

julia> G_nm.fadjlist
50-element Vector{Vector{Int64}}:
 [3, 4, 11, 25, 26, 27, 33, 40, 44, 48]
 [11, 17, 20, 23, 24, 38, 45, 50]
 [1, 4, 15, 24, 29, 30, 34, 42, 46]
 [1, 3, 18, 24, 30, 32, 43, 45]
 [6, 7, 8, 24, 26, 29, 37, 39, 50]
 ⋮
 [3, 13, 17, 28, 29, 32, 39, 44, 47, 49]
 [10, 14, 18, 26, 32, 36, 41, 44, 46]
 [1, 21, 23, 24, 25, 32, 41, 44, 45]
 [9, 13, 14, 17, 21, 31, 43, 46, 50]
 [2, 5, 13, 28, 31, 32, 35, 42, 44, 49]

fieldnames()

次は少し難しい話だけど、具体的に知らなくてもJuliaのプログラミングには何の問題もない。

propertynames(x)は根本的にfieldnames(typeof(x))と同じだと言われている3。実際に使う関数としては大きな意味はないが、これを通じて分かる事実は、Juliaでは構造体structureインスタンスinstanceオブジェクトobjectと呼び、構造体そのものが持っている属性attributeフィールドfield、そしてそのインスタンスとして実際に存在するオブジェクトの属性はプロパティpropertyと呼ばれることである。

環境

  • OS: Windows
  • julia: v1.6.0