168 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | # Arrays Quiz
 | ||
|  | 
 | ||
|  | ## What's the length of this array literal?
 | ||
|  | ```go | ||
|  | gadgets := [...]string{"Mighty Mouse", "Amazing Keyboard", "Shiny Monitor"} | ||
|  | ``` | ||
|  | 1. 0 | ||
|  | 2. 1 | ||
|  | 3. 2 | ||
|  | 4. 3 *CORRECT* | ||
|  | 
 | ||
|  | > **4:** Yes! There are 3 elements in the element list. So, Go sets the length of the array to 3.
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What's the type and length of this array literal?
 | ||
|  | ```go | ||
|  | gadgets := [...]string{} | ||
|  | ``` | ||
|  | 1. [0]string and 0 *CORRECT* | ||
|  | 2. [0]string{} and 0 | ||
|  | 3. [1]string and 1  | ||
|  | 4. [1]string{} and 1  | ||
|  | 
 | ||
|  | > **1:** Yes! There are no elements in the element list. So, Go sets the length of the array to 0.
 | ||
|  | > | ||
|  | 
 | ||
|  | ## What does this program print?
 | ||
|  | ```go | ||
|  | package main | ||
|  | import "fmt" | ||
|  | 
 | ||
|  | func main() { | ||
|  | 	gadgets := [3]string{"Confused Drone"} | ||
|  | 	fmt.Printf("%q\n", gadgets) | ||
|  | } | ||
|  | ``` | ||
|  | 1. [3]string{"Confused Drone", "", ""} | ||
|  | 2. [1]string{"Confused Drone"} | ||
|  | 3. ["Confused Drone" "" ""] *CORRECT* | ||
|  | 4. ["Confused Drone"] | ||
|  | 
 | ||
|  | > **1:** %q verb doesn't print the type of an array.
 | ||
|  | > | ||
|  | > **2, 4:** Array's length cannot change depending on the elements.
 | ||
|  | > | ||
|  | > **3:** Yes! Go sets the uninitialized elements to their zero values.
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Are these arrays comparable?
 | ||
|  | ```go | ||
|  | gadgets := [3]string{"Confused Drone"} | ||
|  | gears   := [...]string{"Confused Drone"} | ||
|  | 
 | ||
|  | fmt.Println(gadgets == gears) | ||
|  | ``` | ||
|  | 1. Yes, because they have identical types and elements | ||
|  | 2. No, because their types are different *CORRECT* | ||
|  | 3. No, because their elements are different | ||
|  | 
 | ||
|  | > **2:** Yes! gadget's type is [3]string whereas gears's type is [1]string.
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What does this program print?
 | ||
|  | ```go | ||
|  | gadgets := [3]string{"Confused Drone", "Broken Phone"} | ||
|  | gears   := gadgets | ||
|  | 
 | ||
|  | gears[2] = "Shiny Mouse" | ||
|  | 
 | ||
|  | fmt.Printf("%q\n", gadgets) | ||
|  | ``` | ||
|  | 1. ["Confused Drone" "Broken Phone" "Shiny Mouse"] | ||
|  | 2. ["Confused Drone" "Broken Phone" ""] *CORRECT* | ||
|  | 3. ["" "" "Shiny Mouse"] | ||
|  | 4. ["" "" ""] | ||
|  | 
 | ||
|  | > **2:** Yes! When you assign an array, Go creates a copy of the original array. So, gadgets and gears arrays are not connected. Changing one of them won't effect the other one.
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What's the type of the digits array?
 | ||
|  | ```go | ||
|  | digits := [...][5]string{ | ||
|  | 	{ | ||
|  | 		"## ", | ||
|  | 		" # ", | ||
|  | 		" # ", | ||
|  | 		" # ", | ||
|  | 		"###", | ||
|  | 	}, | ||
|  | 	[5]string{ | ||
|  | 		"###", | ||
|  | 		"  #", | ||
|  | 		"###", | ||
|  | 		"  #", | ||
|  | 		"###", | ||
|  | 	}, | ||
|  | } | ||
|  | ``` | ||
|  | 1. [...][5]string | ||
|  | 2. [2][2]string | ||
|  | 3. [2][5]string *CORRECT* | ||
|  | 4. [5][5]string | ||
|  | 
 | ||
|  | > **3:** Awesome! There are two inner arrays, so the outer array's length becomes 2. Also note that, `[5]string` in front of the second element is unnecessary.
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## What does this program print?
 | ||
|  | ```go | ||
|  | rates := [...]float64{ | ||
|  |     5: 1.5, | ||
|  |     2.5, | ||
|  |     0: 0.5, | ||
|  | } | ||
|  | 
 | ||
|  | fmt.Printf("%#v\n", rates) | ||
|  | ``` | ||
|  | 1. [7]float64{0.5, 0, 0, 0, 0, 1.5, 2.5} *CORRECT* | ||
|  | 2. [7]float64{1.5, 2.5, 0.5, 0, 0, 0, 0} | ||
|  | 3. [3]float64{1.5, 2.5, 0.5} | ||
|  | 4. [3]float64{0.5, 2.5, 1.5} | ||
|  | 
 | ||
|  | > **1:** That's right! For the explanation check out the example in the course repository here: https://github.com/inancgumus/learngo/tree/master/14-arrays/11-keyed-elements/06-keyed-and-unkeyed
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Are these arrays equal?
 | ||
|  | ```go | ||
|  | type three [3]int | ||
|  | 
 | ||
|  | nums  := [3]int{1, 2, 3} | ||
|  | nums2 := three{1, 2, 3} | ||
|  | 
 | ||
|  | fmt.Println(nums == nums2) | ||
|  | ``` | ||
|  | **Note:** _To solve this question you need to watch the comparison and unnamed types lectures._ | ||
|  | 1. Yes, because they have identical underlying types and elements *CORRECT* | ||
|  | 2. No, because their types are different | ||
|  | 3. No, because their length is different | ||
|  | 
 | ||
|  | > **1:** Yes! They both have the same underlying types: [3]int
 | ||
|  | > | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Are these array variables equal?
 | ||
|  | ```go | ||
|  | type ( | ||
|  |     threeA [3]int | ||
|  |     threeB [3]int | ||
|  | ) | ||
|  | 
 | ||
|  | nums  := threeA{1, 2, 3} | ||
|  | nums2 := threeA(threeB{1, 2, 3}) | ||
|  | 
 | ||
|  | fmt.Println(nums == nums2) | ||
|  | ``` | ||
|  | **Note:** _To solve this question you need to the watch comparison and unnamed types lectures._ | ||
|  | 1. Yes, because they have identical underlying types and elements *CORRECT* | ||
|  | 2. No, because their types are different | ||
|  | 3. No, because their length is different | ||
|  | 
 | ||
|  | > **1:** Yes! Actually, arrays have different types, so normally they're not comparable. However, when you convert `threeB{1, 2, 3}` array to `threeA` type, they become comparable.
 | ||
|  | > |