リストは、プログラミングの重要な要素で、今日使われている最も重要なデータ構造の1つです。この記事では、Goのリストについて詳しく解説していきます。
目次
Golangの container/list パッケージとは
Goでリストを使うには、containerパッケージの中にlistパッケージをインポートします。そして、組み込みのデータ型とその関数を使うことで、Go でリストを使うことができます。
import "container/list"
Golangのリストとは?
リストとは、Goプログラミングでは基本的にリンクリストのことです。
このパッケージには、リストの項目とリスト自身を定義する2つの構造体があります。これらの構造体は、ElementとListと言います。
Goでリストを初期化する方法
ここでは、Goで空のリストを初期化する方法を説明します。リストには何も含まれないので、リストの先頭と末尾は nil になります。
l := list.New() // Initialize an empty list
fmt.Println(l) // &{{0x43e280 0x43e280 <nil> <nil>} 0}
前と後ろの要素
front関数とback関数は、それぞれ前方と後方にある項目を取得します。ここでは、空リストなので、両方の項目がnilになっています。
fmt.Println(l.Front()) // <nil>
fmt.Println(l.Back()) // <nil>
リストへの項目の追加
リストに項目を追加するには、さまざまな方法があります。ここでは、その方法を紹介します。
1.前面に項目を追加する
l.PushFront(10)
fmt.Println(l.Front()) // &{0x43e280 0x43e280 0x43e280 10}
PushFrontList 関数を使用すると、リスト全体を他のリストの前に押し出すことができます。挿入されるリストは適切に初期化されなければならないので、注意が必要です。
l.PushFrontList(l2) // where l2 is another list
2.背面にアイテムを追加する
PushBack 機能は、あるアイテムを受け取り、それを後方にプッシュする機能である。
package main
import (
"fmt"
"container/list"
)
func main() {
l := list.New()
l.PushBack(10)
l.PushBack(12)
l.PushBack(14)
for e := l.Front(); e != nil; e = e.Next() {
fmt.Println(e)
}
// &{0x43e2c0 0x43e280 0x43e280 10}
// &{0x43e2e0 0x43e2a0 0x43e280 12}
// &{0x43e280 0x43e2c0 0x43e280 14}
}
PushBackListも同様ですが、リスト全体を受け取り、それを後ろのリストに追加します。
l.PushBackList(l2) // l2 is a list
リストから項目を削除する
remove関数は、渡された要素をリストから削除するだけです。以下はその動作です。
package main
import (
"fmt"
"container/list"
)
func main() {
l := list.New()
// store the reference
v := l.PushBack(10)
fmt.Println(l.Front()) // &{0x43e280 0x43e280 0x43e280 10}
// remove using the reference
l.Remove(v)
fmt.Println(l.Front()) // <nil>
}