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]