Go - スライス:動的配列への入門ガイド

こんにちは、未来のGoプログラマーたち!今日は、Goの最も万能で強力なデータ構造の1つに潜り込みます:スライスです。スライスをGoプログラミングのスイスアーミーナイフのように考えてください – 彼らは柔軟で効率的で、一度習得すると、どうやってそれなしでコーディングしていたのか不思議に思うことでしょう!

Go - Slice

スライスとは?

まずは準備をしましょう。パーティ(もちろん、コードパーティ!)を計画していると仮定しましょう。ゲストリストが必要ですが、どれだけの人々が来るかはわかりません。ここでスライスが輝きます!彼らは必要に応じて拡大または縮小できる動的なゲストリストのようです。

Goでは、スライスは配列の柔軟で動的なビューです。窓のようにサイズを調整できるので、配列の一部を扱ったり、甚至在 fly で完全に新しい配列を作成したりできます。

スライスの定義

まずは最初のスライスを作成しましょう。いくつかの方法がありますので、一つずつ見ていきましょう。

メソッド1:make()関数を使う

guestList := make([]string, 3)
fmt.Println(guestList) // 出力: [  ]

この例では、初期長が3のスライスのstringを生成しています。パーティのために3つの空椅子を用意しているようなものです。make()関数はパーティプランナーのように、ゲストのためのスペースを準備します。

メソッド2:スライスリテラル

guestList := []string{"Alice", "Bob", "Charlie"}
fmt.Println(guestList) // 出力: [Alice Bob Charlie]

ここでは、スライスを作成し、すぐにゲストを埋めます。即席のVIPリストができるようなものです!

メソッド3:既存の配列をスライスする

partyRoom := [5]string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := partyRoom[0:3]
fmt.Println(vipGuests) // 出力: [Alice Bob Charlie]

この場合、既存の配列からスライスを作成しています。VIPリストにするための最初の3人を選ぶようなものです。

len()とcap()関数

ゲストリストを手に入れたので、重要な2つの関数について話しましょう:len()cap()

guestList := make([]string, 3, 5)
fmt.Printf("Length: %d, Capacity: %d\n", len(guestList), cap(guestList))
// 出力: Length: 3, Capacity: 5
  • len()は現在のリストにいるゲストの数を教えてくれます。
  • cap()はリストが拡大する前にどれだけのゲストを保持できるかを示します。

len()は現在設置されている椅子の数、cap()はパーティールームに利用可能な椅子の総数を考えると良いでしょう。

ニルスライス

時々、スライスを宣言しても初期化しないことがあります。これはnilスライスと呼ばれます。

var emptyList []string
fmt.Println(emptyList == nil) // 出力: true

nilスライスはゲストリストのアイデアがあるがまだリストを作成していないようなものです。これは完全に有効で、特定の状況で非常に便利です!

サブスライス

サブスライスはパーティのVIPエリアを作成するようなものです。既存のスライスの一部を選択して新しいスライスを作成することができます。

fullGuestList := []string{"Alice", "Bob", "Charlie", "David", "Eve"}
vipGuests := fullGuestList[1:4]
fmt.Println(vipGuests) // 出力: [Bob Charlie David]

ここでは、インデックス1から3まで(終端インデックスは除かれます)のゲストを選んでVIPにしています。

append()とcopy()関数

append()

append()関数はパーティのボーイのように新しいゲストを追加できます。

guestList := []string{"Alice", "Bob"}
guestList = append(guestList, "Charlie")
fmt.Println(guestList) // 出力: [Alice Bob Charlie]

一度に複数のゲストを追加することもできます:

guestList = append(guestList, "David", "Eve")
fmt.Println(guestList) // 出力: [Alice Bob Charlie David Eve]

copy()

copy()関数はパーティプランナーのようにゲストリストを複製します。

originalList := []string{"Alice", "Bob", "Charlie"}
newList := make([]string, len(originalList))
copiedElements := copy(newList, originalList)
fmt.Printf("Copied %d elements. New list: %v\n", copiedElements, newList)
// 出力: Copied 3 elements. New list: [Alice Bob Charlie]

スライスメソッドテーブル

以下に、今まで話した主要なスライスメソッドをまとめた便利なテーブルがあります:

メソッド 説明
make() スライスを作成 make([]int, 5)
len() スライスの長さを返す len(slice)
cap() スライスのキャパシティを返す cap(slice)
append() スライスに要素を追加 slice = append(slice, 1, 2, 3)
copy() 一つのスライスから別のスライスに要素をコピー copy(destSlice, sourceSlice)
サブスライス 既存のスライスから新しいスライスを作成 newSlice := slice[1:4]

そして、みんな!あなたたちはGoのスライスの素晴らしい世界への第一歩を踏み出しました。実践が完璧を生むことを忘れないでくださいので、これらの概念を試してみましょう。自分のパーティゲストリストを作成し、追加やコピーを遊びながら、すぐにプロのようにスライスを操作するようになるでしょう!

ハッピーコーディング、そしてあなたのスライスがいつも完璧なサイズでありますように!

Credits: Image by storyset