refactor: slice exercises 19-21
This commit is contained in:
@ -3,8 +3,9 @@ package main
|
|||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// EXERCISE: Observe the capacity growth
|
// EXERCISE: Observe the capacity growth
|
||||||
//
|
//
|
||||||
// Write a program that loops 10 million times to append an element
|
// Write a program that appends elements to a slice
|
||||||
// to a slice, on each step of the loop. Observe the capacity.
|
// 10 million times in a loop. Observe how the capacity of
|
||||||
|
// the slice changes.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// STEPS
|
// STEPS
|
||||||
@ -13,13 +14,12 @@ package main
|
|||||||
//
|
//
|
||||||
// 2. Loop 10e6 times
|
// 2. Loop 10e6 times
|
||||||
//
|
//
|
||||||
// 3. On each loop step: Append an element to the slice
|
// 3. On each iteration: Append an element to the slice
|
||||||
//
|
//
|
||||||
// 4. Only print the length and capacity of the slice everytime
|
// 4. Print the length and capacity of the slice "only"
|
||||||
// the capacity changes.
|
// when its capacity changes.
|
||||||
//
|
//
|
||||||
// 5. Print also the growth rate by calculating the previous and
|
// BONUS: Print also the growth rate of the capacity.
|
||||||
// the current capacity.
|
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// EXPECTED OUTPUT
|
// EXPECTED OUTPUT
|
||||||
|
@ -15,15 +15,22 @@ func main() {
|
|||||||
oldCap float64
|
oldCap float64
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// loop 10 million times
|
||||||
for len(nums) < 10e6 {
|
for len(nums) < 10e6 {
|
||||||
|
// get the capacity
|
||||||
c := float64(cap(nums))
|
c := float64(cap(nums))
|
||||||
|
|
||||||
|
// only print when the capacity changes
|
||||||
if c == 0 || c != oldCap {
|
if c == 0 || c != oldCap {
|
||||||
|
// print also the growth ratio: c/oldCap
|
||||||
fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
|
fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
|
||||||
len(nums), c, c/oldCap)
|
len(nums), c, c/oldCap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// keep track of the previous capacity
|
||||||
oldCap = c
|
oldCap = c
|
||||||
|
|
||||||
|
// append an arbitrary element to the slice
|
||||||
nums = append(nums, 1)
|
nums = append(nums, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,30 +8,35 @@ import (
|
|||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// EXERCISE: Correct the lyric
|
// EXERCISE: Correct the lyric
|
||||||
//
|
//
|
||||||
// You have a slice of lyrics data of Beatles' awesome
|
// You have a slice that contains the words of Beatles'
|
||||||
// song: Yesterday. Your goal is putting the words into
|
// legendary song: Yesterday. However, the order of the
|
||||||
// correct positions.
|
// words are incorrect.
|
||||||
//
|
//
|
||||||
|
// CURRENT OUTPUT
|
||||||
//
|
//
|
||||||
// STEPS
|
// [all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay]
|
||||||
//
|
|
||||||
// 1. Prepend "yesterday" to the `lyric` slice.
|
|
||||||
//
|
|
||||||
// 2. Put the words to the correct position in the `lyric` slice.
|
|
||||||
//
|
|
||||||
// 3. Print the `lyric` slice.
|
|
||||||
//
|
|
||||||
//
|
//
|
||||||
// EXPECTED OUTPUT
|
// EXPECTED OUTPUT
|
||||||
//
|
//
|
||||||
// [yesterday all my troubles seemed so far away now it looks as though they are here to stay oh i believe in yesterday]
|
// [yesterday all my troubles seemed so far away now it looks as though they are here to stay oh i believe in yesterday]
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
// STEPS
|
||||||
|
//
|
||||||
|
// 1. Prepend "yesterday" to the `lyric` slice.
|
||||||
|
//
|
||||||
|
// 2. Put the words to the correct positions in the `lyric` slice.
|
||||||
|
//
|
||||||
|
// 3. Print the `lyric` slice.
|
||||||
|
//
|
||||||
|
// HINT: You don't need use the "yesterday" word from the `lyric` slice.
|
||||||
|
//
|
||||||
|
//
|
||||||
// BONUS
|
// BONUS
|
||||||
//
|
//
|
||||||
// . Think about when does the append allocates a new backing array.
|
// + Think about when does the append allocates a new backing array.
|
||||||
// . Then check whether your conclusions are true or not.
|
//
|
||||||
// . You can use the prettyslice package to check the backing array.
|
// + Check whether your conclusions are correct.
|
||||||
//
|
//
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ func main() {
|
|||||||
// yesterday all my troubles seemed so far away
|
// yesterday all my troubles seemed so far away
|
||||||
// now it looks as though they are here to stay
|
// now it looks as though they are here to stay
|
||||||
// oh i believe in yesterday
|
// oh i believe in yesterday
|
||||||
|
|
||||||
lyric := strings.Fields(`all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay`)
|
lyric := strings.Fields(`all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay`)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@ -36,7 +35,7 @@ func main() {
|
|||||||
lyric = append([]string{"yesterday"}, lyric...)
|
lyric = append([]string{"yesterday"}, lyric...)
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// #2: Put the words to the correct position in the `lyric` slice.
|
// #2: Put the words to the correct positions in the `lyric` slice.
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user