🗑️

Juliaで配列の要素を削除する

2023/01/10に公開

「Julia 配列 要素 削除」のように検索しても意外と引っかからないのでこの記事を書きました. いくつかの例を示します.

差集合を取る

配列は集合ではありませんが, setdiff()を利用できます. これで目的が達成できる場面は少なくないと思います. 例えば, ある1つの要素を指定して取り出す場合は下記のようにsetdiff(A, ["bb"])を使います.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> setdiff(A, ["bb"])
4-element Vector{String}:
 "a"
 "ccc"
 "dddd"
 "eeeee"

複数の要素は削除する場合はsetdiff(A, ["bb", "ccc"])のように複数の要素を含む配列を渡してを使います.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> setdiff(A, ["bb", "ccc"])
3-element Vector{String}:
 "a"
 "dddd"
 "eeeee"

これ以降の方法は, 要素の添え字を指定して削除する方法がメインになります.

最後の要素を削除する

pop!(配列)のようにして, 配列の最後の要素を削除できます.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> pop!(A)
"eeeee"

julia> A
4-element Vector{String}:
 "a"
 "bb"
 "ccc"
 "dddd"

最初の要素を削除する

popfirst!(配列)のようにして, 配列の最初の要素を削除できます.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> popfirst!(A)
"a"

julia> A
4-element Vector{String}:
 "bb"
 "ccc"
 "dddd"
 "eeeee"

1つの要素を削除する

deleteat!(配列, 削除したい要素の番号)のようにして, 指定した要素を削除できます.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> deleteat!(A, 2)
4-element Vector{String}:
 "a"
 "ccc"
 "dddd"
 "eeeee"

連続した要素を削除する

これは2~4番目の要素を削除する例です. 2の部分を2:4のように置き換えています.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> deleteat!(A, 2:4)
2-element Vector{String}:
 "a"
 "eeeee"

連続しない複数の要素を削除する

上記の2:4[2,4]のように置き換えると, 2番目と4番目のみ削除する例となります.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> deleteat!(A, [2,4])
3-element Vector{String}:
 "a"
 "ccc"
 "eeeee"

条件に合う要素を削除する

上記の例で[2,4]としたところをfindall(x->length(x)<3,A)のように置き換えます. これは3文字未満の要素を削除する例です.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> deleteat!(A, findall(x->length(x)<3,A))
3-element Vector{String}:
 "ccc"
 "dddd"
 "eeeee"

条件に合う要素を抜き出して別の配列にする

配列を変更せず, B=A[[1,2]]のようにして別の配列として保存することもできます.

julia> A = ["a", "bb", "ccc", "dddd", "eeeee"]

julia> B = A[findall(x->length(x)<3,A)]
2-element Vector{String}:
 "a"
 "bb"

Discussion