0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スライスの長さ、容量、ゼロ値

Last updated at Posted at 2024-12-25

はじめに

A Tour of Goについて勉強になった箇所をまとめる。

長さと容量

長さ:スライスが現在持っている要素の数
容量:スライスが背後で確保している配列のサイズ

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)

	// Slice the slice to give it zero length.
	s = s[:0]
	printSlice(s)

	// Extend its length.
	s = s[:4]
	printSlice(s)

	// Drop its first two values.
	s = s[2:]
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
// len=6 cap=6 [2 3 5 7 11 13]
// len=0 cap=6 []
// len=4 cap=6 [2 3 5 7]
// len=2 cap=4 [5 7]

容量を指定しない場合

要素の追加によって長さが容量を超えたとき、新しくより大きな容量を持つ配列を確保し、既存の要素を新しい配列にコピーした後、新しい要素を追加する。
このプロセスが自動的に行われるため、容量の管理を意識する必要がない。

容量を指定する場合

容量は要素が追加されるたびに倍増する。これにより、大量の要素を追加する際のメモリ再割り当ての回数を減らし、パフォーマンスを向上させることができる。

ゼロ値

スライスのゼロ値はnil
nilスライスは長さと容量は0

package main

import "fmt"

func main() {
	var s []int
	fmt.Println(s, len(s), cap(s))
	if s == nil {
		fmt.Println("nil!")
	}
}
// [] 0 0
// nil!
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?