refactor: slice exercises 19-21

This commit is contained in:
Inanc Gumus
2019-08-18 15:08:32 +03:00
parent 2dab6c53c9
commit 5d6b493e75
4 changed files with 34 additions and 23 deletions

View File

@ -3,8 +3,9 @@ package main
// ---------------------------------------------------------
// EXERCISE: Observe the capacity growth
//
// Write a program that loops 10 million times to append an element
// to a slice, on each step of the loop. Observe the capacity.
// Write a program that appends elements to a slice
// 10 million times in a loop. Observe how the capacity of
// the slice changes.
//
//
// STEPS
@ -13,13 +14,12 @@ package main
//
// 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
// the capacity changes.
// 4. Print the length and capacity of the slice "only"
// when its capacity changes.
//
// 5. Print also the growth rate by calculating the previous and
// the current capacity.
// BONUS: Print also the growth rate of the capacity.
//
//
// EXPECTED OUTPUT

View File

@ -15,15 +15,22 @@ func main() {
oldCap float64
)
// loop 10 million times
for len(nums) < 10e6 {
// get the capacity
c := float64(cap(nums))
// only print when the capacity changes
if c == 0 || c != oldCap {
// print also the growth ratio: c/oldCap
fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
len(nums), c, c/oldCap)
}
// keep track of the previous capacity
oldCap = c
// append an arbitrary element to the slice
nums = append(nums, 1)
}
}