Довжина проти Місткості
Можна визначити довжину масиву або зрізу за допомогою функції 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
Можна визначити місткість (capacity) масиву або зрізу за допомогою функції 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 повернула новий зріз, який більше не посилається на початковий масив.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain more about how the `append` function works with slices?
What happens if I modify a slice after exceeding its capacity?
Can you provide an example showing the difference between modifying a slice within its capacity and after exceeding it?
Awesome!
Completion rate improved to 1.96
Довжина проти Місткості
Свайпніть щоб показати меню
Можна визначити довжину масиву або зрізу за допомогою функції 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
Можна визначити місткість (capacity) масиву або зрізу за допомогою функції 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 повернула новий зріз, який більше не посилається на початковий масив.
Дякуємо за ваш відгук!