Juliaで学ぶプログラミング入門 コレクション／操作

## コレクションの操作
Julia は高性能で高速なプログラミング言語です。そのため、Julia では多くの種類のコレクションを扱うことができます。これらのコレクションには、配列やリスト、辞書、タプル、セットなどがあります。

各コレクションには、特定の操作を実行するためのコマンドが用意されています。例えば、配列に要素を追加するためには、push! 関数を使用します。また、辞書に新しい要素を追加するためには、setindex! 関数を使用します。

## 関数
以下は、Julia コレクションの各操作コマンドの一覧です。

| 関数|内容 |
|---|--|
|push!|配列に要素を追加する|
|pop!|配列から要素を削除する|
|getindex|配列から要素を取得する|
|setindex!|配列の要素を変更する|
|in|配列に特定の要素が含まれるかどうかを確認する|
|haskey|辞書に特定のキーが含まれるかどうかを確認する|
|get|辞書から特定のキーに対応する値を取得する|
|delete!|辞書から特定のキーを削除する|


これらのコマンドを使用することで、Julia コレクションを効率的に操作することができます。

### push!
Julia では、push! 関数を使用することで、配列に要素を追加することができます。この関数は、破壊的な操作(=引数自身の値を更新する)を行うため、関数名の後ろに「!」が付いています。

例えば、次のようにして配列に要素を追加することができます。

```julia
# 配列を定義する
my_array = [1, 2, 3]

# push! 関数を使用して、配列に要素を追加する
push!(my_array, 4)

# 追加された要素を確認する
println(my_array)
# [1, 2, 3, 4]
```

### pop!

Julia では、pop! 関数を使用することで、配列から要素を削除することができます。この関数も、破壊的な操作を行うため、関数名の後ろに「!」が付いています。

例えば、次のようにして配列から末尾の要素を削除することができます。

```julia
# 配列を定義する
my_array = [1, 2, 3]

# pop! 関数を使用して、配列から末尾の要素を削除する
pop!(my_array)

# 削除された要素を確認する
println(my_array)
# [1, 2]
```

### getindex

Julia では、getindex 関数を使用することで、配列から要素を取得することができます。

例えば、次のようにして配列から 2 番目の要素を取得することができます。

```julia
# 配列を定義する
my_array = [1, 2, 3]

# getindex 関数を使用して、配列から 2 番目の要素を取得する
value = getindex(my_array, 2)

# 取得された値を確認する
println(value)
# 2
```
これは以下と同じです
```jula
# 配列から 2 番目の要素を取得する
value = my_array[2]

# 取得された値を確認する
println(value)
# 2

```

juliaは二次元配列の場合の位置指定は列優先でカウントしていきます
```julia
A = [1 2; 3 4]

# 2番目は３であることを確認
println(A[2])
# ３

# 3番目は2であることを確認
println(A[2])
# 2

println(getindex(A, 1))
# 1

# 第２引数は2番目と１番めを取り出すという意味 
println(getindex(A, [2, 1]))
# [3, 1]

# 第２引数は2番目から4番めを取り出すという意味 
println(getindex(A, 2:4))
# [3, 2, 4]
```

### setindex!
Julia では、setindex! 関数を使用することで、配列の要素を変更することができます。この関数も、破壊的な操作を行うため、関数名の後ろに「!」が付いています。

例えば、次のようにして配列から 2 番目の要素を変更することができます。

```julia
# 配列を定義する
my_array = [1, 2, 3]

# setindex! 関数を使用して、配列から 2 番目の要素を変更する
setindex!(my_array, 4, 2)

# 変更された値を確認する
println(my_array)
# => [1, 4, 3]
```

これは以下と同じです
```julia
# 配列から 2 番目の要素を変更する
my_array[2] = 5

# 変更された値を確認する
println(my_array)
# [1, ５, 3]

```



### in 
in関数は、特定の値が配列等の中に存在するかどうかを判定するものです。

```julia
# 配列の中に3が含まれているかどうかを判定する
array = [1, 2, 3, 4, 5]
3 in array
# true
```
上記の例では、in演算子を使って配列や中に特定の値が含まれているかどうかを判定しています。もし、特定の値が含まれている場合はtrueを返し、含まれていない場合はfalseを返します。


### haskey
haskey関数は、特定の値が辞書のkeyの中に存在するかどうかを判定するものです。

```julia
# 辞書の中に"apple"というキーが含まれているかどうかを判定する
dictionary = Dict("apple"=>1, "orange"=>2, "banana"=>3)
println(haskey(dictionary, "apple"))
# true
```



### get
辞書のkeyを指定して値を取得します。
get関数の第3引数には、指定したキーが辞書の中に存在しない場合に返すデフォルト値を指定します。

```julia
# 辞書から"apple"というキーに対応する値を取得する
dictionary = Dict("apple"=>1, "orange"=>2, "banana"=>3)
println(get(dictionary, "apple",0))
# 1
# 辞書から"pinapple"というキーに対応する値を取得する
println(get(dictionary, "pinapple",0))
# 0  
```
これはdict[key]と近いですが存在しない場合の処理が異なるます。
```julia
#dict[key]形式の場合
dictionary = Dict("apple"=>1, "orange"=>2, "banana"=>3)
println(dictionary["pinapple"])
# ERROR: KeyError: key "pinapple" not found


```

### delete!
delete!関数は、辞書型データ構造から特定のキーに対応する値を削除するための関数です。次のように使用します。
!のある自己破壊型です。

```julia
dictionary = Dict("apple"=>1, "orange"=>2, "banana"=>3)
delete!(dictionary, "apple")
prntln(dictionary)
#  "orange" => 2 ,"banana" => 3

```

## 参考図書
[１から始めるプログラミング](https://amzn.to/3HHR7Yv)
<a href="https://www.amazon.co.jp/1%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B-Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%80%B2%E8%97%A4-%E8%A3%95%E4%B9%8B/dp/433902905X?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-1&linkCode=li3&tag=buzz06-22&linkId=8f7deba521f52f812d35ecdbe756cc10&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=433902905X&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=433902905X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[Juliaプログラミングクックブック](https://amzn.to/3PFfb0a)
<a href="https://www.amazon.co.jp/Julia%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E2%80%95%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%80%81%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%80%81%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%BE%E3%81%A7-Bogumi%C5%82-Kami%C5%84ski/dp/4873118891?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-2&linkCode=li3&tag=buzz06-22&linkId=4e34b4b620932164412ec18acff914a8&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118891&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4873118891" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

[天才プログラマー タンメイが教える Julia超入門](https://amzn.to/3FJRpeW)
<a href="https://www.amazon.co.jp/%E5%A4%A9%E6%89%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC-%E3%82%BF%E3%83%B3%E3%83%A1%E3%82%A4%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Julia%E8%B6%85%E5%85%A5%E9%96%80-Tanmay-Bakshi/dp/4807920219?crid=2JGVUDQSK5GJQ&keywords=julia+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E&qid=1671346628&sprefix=julia+%2Caps%2C224&sr=8-10&linkCode=li3&tag=buzz06-22&linkId=bf79aa67b5c5956c8fd26f9436401dc6&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4807920219&Format=_SL250_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=buzz06-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=buzz06-22&language=ja_JP&l=li3&o=9&a=4807920219" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />