2023.06.17  

【Go】配列の要素を削除する方法(先頭,末尾,中間)

Go    

Go言語にはPythonでいうところのpop()のような、一部の要素を簡単に削除できる関数がないようです。
そこでGoの配列の要素をできるだけ簡単に削除できる方法を考えたので、メモ書きしておくことにしました。

前提:配列list := []string{"A", "B", "C", "D", "E", "F"}の中身を扱うものとします。

1番目の要素を削除する

基本的に、要素の削除にはappendを利用します。

package main

import (
    "fmt"
)

func main() {
    list := []string{"A", "B", "C", "D", "E", "F"}
    tmp := []string{}

    // 配列の要素を削除
    list = append(tmp, list[1:]...)

    fmt.Printf("list: %v\n", list)
}

// 出力結果
// list: [B C D E F]

この処理ではlist[1:]...A以外の要素を取得し、空のtmpにlist[1:]...の内容を渡し、tmpの内容をlistに上書きしています。
ちなみに...は可変長引数の関数(append)に値を全て渡す時に使用します。

末尾の要素を削除する

理屈は1番目の要素を削除する方法とほぼ同じですが、末尾以外の要素を取得するのにlist[:len(list)-1]という書き方をしているところが今回のポイントです。

package main

import (
    "fmt"
)

func main() {
    list := []string{"A", "B", "C", "D", "E", "F"}
    tmp := []string{}

    // 配列の要素を削除
    list = append(tmp, list[:len(list)-1]...)

    fmt.Printf("list: %v\n", list)
}

// 出力結果
// list: [A B C D E]

中間の要素を削除する

list := []string{"A", "B", "C", "D", "E", "F"}Bだけ抜き出した場合は次のようにします。

package main

import (
    "fmt"
)

func main() {
    list := []string{"A", "B", "C", "D", "E", "F"}
    tmp := []string{}

    // 配列の要素を削除
    tmp = append(tmp, list[0])
    list = append(tmp, list[2:]...)

    fmt.Printf("list: %v\n", list)
}

// 出力結果
// list: [A C D E F]

愚直に書くなら次のようになりますね。

package main

import (
    "fmt"
)

func main() {
    list := []string{"A", "B", "C", "D", "E", "F"}
    tmp := []string{}

    // 配列の要素を削除
    list = append(tmp, list[0], list[2], list[3], list[4], list[5])

    fmt.Printf("list: %v\n", list)
}

// 出力結果
// list: [A C D E F]
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信