Lunghezza vs Capacità
Possiamo determinare la lunghezza di un array o di uno slice utilizzando la funzione 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
Possiamo determinare la capacità di un array o di uno slice utilizzando la funzione 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
La lunghezza e la capacità di un array sono sempre uguali. Tuttavia, per uno slice, la capacità può differire dalla lunghezza. Ad esempio, nel caso in cui uno slice venga creato da un array, la capacità è maggiore della lunghezza:
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
La capacità di uno slice è il numero di elementi dall'startingIndex dello slice fino alla fine dell'array originale da cui è stato creato. Nell'esempio sopra, è 6.
Ricorda che modificare uno slice modifica anche l'array originale. Pertanto, nell'esempio fornito, aggiungere un elemento (o valore) a uno slice aggiorna essenzialmente l'elemento successivo all'indice finale dello slice nell'array originale. In altre parole, aumenta la dimensione dello slice e aggiorna gli elementi dell'array originale in base agli elementi/valori aggiunti. Questo sarà più chiaro con un esempio:
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]
La capacità è utile per determinare quanti elementi possiamo aggiungere allo slice. Se superiamo la capacità dello slice, la funzione append crea e restituisce un nuovo slice che non è collegato a una porzione dell'array originale. Pertanto, esso diventa separato dall'array originale.
Puoi vedere il seguente esempio: l'array originale rimane invariato anche se abbiamo aggiunto più elementi al suo slice:
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]
Questo è successo perché lo slice aveva una capacità di 3, che abbiamo superato. Di conseguenza, la funzione append ha restituito un nuovo slice che non fa più riferimento all'array originale.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Lunghezza vs Capacità
Scorri per mostrare il menu
Possiamo determinare la lunghezza di un array o di uno slice utilizzando la funzione 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
Possiamo determinare la capacità di un array o di uno slice utilizzando la funzione 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
La lunghezza e la capacità di un array sono sempre uguali. Tuttavia, per uno slice, la capacità può differire dalla lunghezza. Ad esempio, nel caso in cui uno slice venga creato da un array, la capacità è maggiore della lunghezza:
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
La capacità di uno slice è il numero di elementi dall'startingIndex dello slice fino alla fine dell'array originale da cui è stato creato. Nell'esempio sopra, è 6.
Ricorda che modificare uno slice modifica anche l'array originale. Pertanto, nell'esempio fornito, aggiungere un elemento (o valore) a uno slice aggiorna essenzialmente l'elemento successivo all'indice finale dello slice nell'array originale. In altre parole, aumenta la dimensione dello slice e aggiorna gli elementi dell'array originale in base agli elementi/valori aggiunti. Questo sarà più chiaro con un esempio:
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]
La capacità è utile per determinare quanti elementi possiamo aggiungere allo slice. Se superiamo la capacità dello slice, la funzione append crea e restituisce un nuovo slice che non è collegato a una porzione dell'array originale. Pertanto, esso diventa separato dall'array originale.
Puoi vedere il seguente esempio: l'array originale rimane invariato anche se abbiamo aggiunto più elementi al suo slice:
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]
Questo è successo perché lo slice aveva una capacità di 3, che abbiamo superato. Di conseguenza, la funzione append ha restituito un nuovo slice che non fa più riferimento all'array originale.
Grazie per i tuoi commenti!