Open1

Juliaのメモ

akio tanakaakio tanaka

REPL操作

  • シェルコマンド相当の命令
    • ホームディレクトリの取得: homedir()
      • 戻り値の型はString
      • 移動はしない
    • 作業フォルダ取得: pwd()
      • 戻り値の型はString
    • 作業フォルダ内のファイル・フォルダ一覧取得: readdir()
      • 戻り値の型はVector{String}
    • 作業フォルダの移動: cd(pwd() * "\\" * readdir()[1])
  • パッケージモード
    • 移行: ]
    • 終了: <backspaceキー>
    • パッケージのインストール: add <package name>

文字列操作

  • 大文字変換: res_upper = uppercase("Julia")
  • 小文字変換: res_lower = lowercase("JULIA")
  • 変換: res_replace = replace(str, "org" => "replaced")
  • 連結: res_concat = "hello, " * "world!"
  • 結合: res_join = join(["I", "am", "shit"], ",")
  • 分割: tokens = split("Ma.rch", ".")
    • 戻り値の型はVector{SubString{String}}
    • 戻り値の型をVector{String}にしたい場合は、tokens = String.(split("Ma.rch", "."))
  • 文字列の数値を変換しながら受ける
    • one, two = parse.(Int32, split("1 2"))
    • oneTowVec = parse.(Int32, split("1 2"))

ファイル入出力

  • asciiファイル読み込み: 下記のどちらか
    • lines = readlines(filename)
    • lines = split(read(filepath, String), "\n")
  • asciiファイル書き込み:
open(filepath, "w") do f
    for line in lines
        println(f, line)
    end
end

コレクション

Set

  • オブジェクトに対するSet
  • オブジェクトのプロパティであるidで同値判定
struct MyObject
    id::Int
    name::String
end

Base.hash(obj::MyObject, h::UInt) = hash(obj.id, h)
Base.:(==)(obj1::MyObject, obj2::MyObject) = obj1.id == obj2.id

my_set = Set{MyObject}()
push!(my_set, MyObject(1, "Object1"))
push!(my_set, MyObject(2, "Object2"))
MyObject(1, "test") in my_set

JSON

JSON.jsを利用:

using JSON

s = "{\"a_number\": 5.0, \"an_array\": [\"strin\", 9]}"
parsed = JSON.parse(s)
jsoned = JSON.json(parsed)