Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Pituus vs Kapasiteetti | Taulukot ja Viipaleet
Johdatus Golangiin

bookPituus vs Kapasiteetti

Taulukon tai viipaleen pituus voidaan selvittää len-funktiolla:

index.go

index.go

copy
12345
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5

Taulukon tai viipaleen kapasiteetti voidaan selvittää cap-funktion avulla:

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

Taulukon pituus ja kapasiteetti ovat aina samat. Viipaleen kohdalla kapasiteetti voi kuitenkin poiketa pituudesta. Esimerkiksi, kun viipale luodaan taulukosta, kapasiteetti on suurempi kuin pituus:

index.go

index.go

copy
1234
randomNumbers := [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

Viipaleen kapasiteetti tarkoittaa niiden alkioiden määrää, jotka ulottuvat viipaleen startingIndex-indeksistä alkuperäisen taulukon loppuun, josta viipale on luotu. Yllä olevassa esimerkissä kapasiteetti on 6.

Muista, että viipaleen muokkaaminen muuttaa myös alkuperäistä taulukkoa. Tässä esimerkissä alkion (tai arvon) lisääminen viipaleeseen päivittää käytännössä alkuperäisen taulukon viipaleen loppuindeksin viereisen alkion. Toisin sanoen, viipaleen koko kasvaa ja alkuperäisen taulukon alkiot päivittyvät lisättyjen arvojen mukaisesti. Tämä selkeytyy seuraavan esimerkin avulla:

index.go

index.go

copy
12345
randomNumbers := [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]

Kapasiteetti on hyödyllinen, kun halutaan tietää, kuinka monta alkiota viipaleeseen voidaan lisätä. Jos viipaleen kapasiteetti ylitetään, append-funktio luo ja palauttaa uuden viipaleen, joka ei enää ole yhteydessä alkuperäisen taulukon osaan. Tällöin viipale irtoaa alkuperäisestä taulukosta.

Seuraavassa esimerkissä alkuperäinen taulukko pysyy muuttumattomana, vaikka viipaleeseen lisätään enemmän alkioita:

index.go

index.go

copy
12345678
numbers := [] 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]

Tämä tapahtui, koska viipaleen kapasiteetti oli 3, jonka ylitimme. Tämän seurauksena append-funktio palautti uuden viipaleen, joka ei enää viittaa alkuperäiseen taulukkoon.

question mark

Mikä on oikea syntaksi alkion z lisäämiseksi viipaleeseen nimeltä alphabets?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

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

bookPituus vs Kapasiteetti

Pyyhkäise näyttääksesi valikon

Taulukon tai viipaleen pituus voidaan selvittää len-funktiolla:

index.go

index.go

copy
12345
randomNumbers := [] int { 1, 4, 5, 7, 9, 10, 12 } fmt.Println(len(randomNumbers)) // Output: 7 numbersSlice := randomNumbers[2:7] fmt.Println(len(numbersSlice)) // Output: 5

Taulukon tai viipaleen kapasiteetti voidaan selvittää cap-funktion avulla:

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

Taulukon pituus ja kapasiteetti ovat aina samat. Viipaleen kohdalla kapasiteetti voi kuitenkin poiketa pituudesta. Esimerkiksi, kun viipale luodaan taulukosta, kapasiteetti on suurempi kuin pituus:

index.go

index.go

copy
1234
randomNumbers := [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

Viipaleen kapasiteetti tarkoittaa niiden alkioiden määrää, jotka ulottuvat viipaleen startingIndex-indeksistä alkuperäisen taulukon loppuun, josta viipale on luotu. Yllä olevassa esimerkissä kapasiteetti on 6.

Muista, että viipaleen muokkaaminen muuttaa myös alkuperäistä taulukkoa. Tässä esimerkissä alkion (tai arvon) lisääminen viipaleeseen päivittää käytännössä alkuperäisen taulukon viipaleen loppuindeksin viereisen alkion. Toisin sanoen, viipaleen koko kasvaa ja alkuperäisen taulukon alkiot päivittyvät lisättyjen arvojen mukaisesti. Tämä selkeytyy seuraavan esimerkin avulla:

index.go

index.go

copy
12345
randomNumbers := [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]

Kapasiteetti on hyödyllinen, kun halutaan tietää, kuinka monta alkiota viipaleeseen voidaan lisätä. Jos viipaleen kapasiteetti ylitetään, append-funktio luo ja palauttaa uuden viipaleen, joka ei enää ole yhteydessä alkuperäisen taulukon osaan. Tällöin viipale irtoaa alkuperäisestä taulukosta.

Seuraavassa esimerkissä alkuperäinen taulukko pysyy muuttumattomana, vaikka viipaleeseen lisätään enemmän alkioita:

index.go

index.go

copy
12345678
numbers := [] 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]

Tämä tapahtui, koska viipaleen kapasiteetti oli 3, jonka ylitimme. Tämän seurauksena append-funktio palautti uuden viipaleen, joka ei enää viittaa alkuperäiseen taulukkoon.

question mark

Mikä on oikea syntaksi alkion z lisäämiseksi viipaleeseen nimeltä alphabets?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 4
some-alt