長さと容量
メニューを表示するにはスワイプしてください
配列やスライスの長さは、len 関数を使って取得可能。
index.go
12345randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5
配列やスライスの容量は、cap 関数を使用して確認可能:
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 }
fmt.Println(cap(randomNumbers)) // Output: 7
numbersSlice := randomNumbers[2:7]
fmt.Println(cap(numbersSlice)) // Output: 5
配列の長さと容量は常に同じ。一方、スライスの場合は容量が長さと異なる場合がある。例えば、配列からスライスを作成した場合、容量は長さより大きくなる:
index.go
1234randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(len(numbersSlice)) // Output: 2 fmt.Println(cap(numbersSlice)) // Output: 6
スライスのキャパシティは、スライスのstartingIndexから元の配列の末尾までの要素数を指します。上記の例では、これは6です。
スライスを変更すると、元の配列も変更されることに注意してください。したがって、与えられた例では、スライスに要素(または値)を追加すると、元の配列のスライスの終了インデックスの次の要素が更新されます。つまり、スライスのサイズが増加し、追加された要素や値に基づいて元の配列の要素が更新されます。以下の例でより明確になります。
index.go
12345randomNumbers := [7] int { 1, 4, 5, 7, 9, 10, 12 } numbersSlice := randomNumbers[1:3] fmt.Println(randomNumbers) // Output: [1 4 5 7 9 10 12] numbersSlice = append(numbersSlice, 20, 30, 40) fmt.Println(randomNumbers) // Output: [1 4 5 20 30 40 12]
キャパシティは、スライスに追加できる要素数を判断するのに役立ちます。スライスのキャパシティを超えると、append関数は元の配列の一部とは接続されていない新しいスライスを作成して返します。そのため、元の配列から切り離されます。
次の例のように、スライスにさらに要素を追加しても元の配列は変更されません。
index.go
12345678numbers := [] int { 1, 2, 3, 4 } numSlice := numbers[1:3] fmt.Println(numbers) // Outputs: [1 2 3 4] fmt.Println(numSlice) // Outputs: [2 3] fmt.Println(cap(numSlice)) // Outputs: 3 numSlice = append(numSlice, 9, 10) fmt.Println(numSlice) // Outputs: [2 3 9 10] fmt.Println(numbers) // Outputs: [1 2 3 4]
これは、スライスの容量が3であり、それを超えたために発生しました。その結果、append関数は元の配列を参照しない新しいスライスを返しました。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 4
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 5. 章 4