68 lines
2.3 KiB
Markdown
68 lines
2.3 KiB
Markdown
![]() |
# The Mechanics of Append Quiz
|
||
|
|
||
|
## Which append call below allocates a new backing array for the following slice?
|
||
|
```go
|
||
|
words := []string{"lucy", "in", "the", "sky", "with", "diamonds"}
|
||
|
```
|
||
|
1. words = append(words[:3], "crystals")
|
||
|
2. words = append(words[:4], "crystals")
|
||
|
3. words = append(words[:5], "crystals")
|
||
|
4. words = append(words[:5], "crystals", "and", "diamonds") *CORRECT*
|
||
|
|
||
|
> **1:** No, it just overwrites the 4th element.
|
||
|
>
|
||
|
> **2:** No, it just overwrites the 5th element.
|
||
|
>
|
||
|
> **3:** No, it just overwrites the last element.
|
||
|
>
|
||
|
> **4:** Yes, it overwrites the last element, then it adds two element. However, there is not enough space to do that, so it allocates a new backing array.
|
||
|
|
||
|
|
||
|
## What does the program print?
|
||
|
```go
|
||
|
words := []string{"lucy", "in", "the", "sky", "with", "diamonds"}
|
||
|
words = append(words[:1], "is", "everywhere")
|
||
|
words = append(words, words[len(words)+1:cap(words)]...)
|
||
|
```
|
||
|
1. lucy in the sky with diamonds
|
||
|
2. lucy is everywhere in the sky with diamonds
|
||
|
3. lucy is everywhere with diamonds *CORRECT*
|
||
|
4. lucy is everywhere
|
||
|
|
||
|
> **3:** line #2 overwrites the 2nd and 3rd elements. line #3 appends ["with" "diamonds"] after the ["lucy" "is" "everwhere"].
|
||
|
|
||
|
|
||
|
## What are the length and capacity of the words slice?
|
||
|
```go
|
||
|
// The words slice has 1023 elements.
|
||
|
//
|
||
|
// Tip: The keyed slice works like the same as a keyed array.
|
||
|
// If you don't remember how it works, please check out the keyed elements in the arrays section.
|
||
|
//
|
||
|
words := []string{1022: ""}
|
||
|
words = append(words, "boom!")
|
||
|
```
|
||
|
1. Length: 1024 - Capacity: 1024
|
||
|
2. Length: 1025 - Capacity: 1025
|
||
|
3. Length: 1025 - Capacity: 1280
|
||
|
4. Length: 1024 - Capacity: 2048 *CORRECT*
|
||
|
|
||
|
> **4:** That's right! Append function grows by doubling the capacity of the previous slice.
|
||
|
|
||
|
|
||
|
## What are the length and capacity of the words slice?
|
||
|
```go
|
||
|
// The words slice has 1024 elements.
|
||
|
//
|
||
|
// Tip: The keyed slice works like the same as a keyed array.
|
||
|
// If you don't remember how it works, please check out the keyed elements in the arrays section.
|
||
|
//
|
||
|
words := []string{1023: ""}
|
||
|
words = append(words, "boom!")
|
||
|
```
|
||
|
1. Length: 1024 - Capacity: 1024
|
||
|
2. Length: 1025 - Capacity: 1025
|
||
|
3. Length: 1025 - Capacity: 1280 *CORRECT*
|
||
|
4. Length: 1025 - Capacity: 2048
|
||
|
|
||
|
> **3, 4:** After 1024 elements, the append function grows at a slower rate, about 25%.
|