GO 數組相關操做

package main

import(
	"fmt"
	"math/rand"
	"time"
)

func main() {
	//數組的幾種定義方式
	var arr1 [3]int = [3]int{1,2,3}
	var arr2 = [3]int{4,5,6}
	arr3 := [3]string{"h", "w", "z"}
	var arr4 = [...]int{1,2,3} //[...]固定寫法
	var arr5 = [...]string{1:"zhangsan", 0:"lisi", 2:"wangwu"} //能夠指定數組下標

	fmt.Printf("arr1 = %v, type %T\n", arr1, arr1)
	fmt.Printf("arr2 = %v, arr2[0]的地址%p\n", arr2, &arr2[0])
	fmt.Printf("arr3 = %v, arr3 %p, arr3[2]的地址%p\n", arr3, &arr3, &arr3[2])
	//for遍歷數組
	for i := 0; i < len(arr4); i++ {
		fmt.Printf("arr 第%v個元素的值%v\n", i, arr4[i])
	}
	fmt.Println(arr5)

	//for range 遍歷
	//for _,v := range arr 這樣只關心 v值; 不關心i下標
	for i,v := range arr5 {
		fmt.Printf("i = %v, v = %v\n", i, v)
	}

	//細節
	var testArr [3]int //一旦定義了數組類型以及長度;之後就是不能動態改變
	testArr[0] = 1
	testArr[1] = 2
	//testArr[3] = 2.1 //此時要報錯 類型不正確
	//testArr[4] = 4 //越界也不行
	fmt.Println(testArr)

	//默認值 數字(整型,浮點)是0,string 是空字符串,bool 是false
	var testIntArr [3]float32
	var testStrArr [3]string
	var testBoolArr [3]bool
	//intarr = [0 0 0], strArr = [  ], boolArr = [false false false]
	fmt.Printf("intarr = %v, strArr = %v, boolArr = %v\n", testIntArr, testStrArr, testBoolArr)

	//數組是值傳遞
	tv := [3]int{1,2,3}
	testValArr(tv)
	//1,2,3 沒有改變
	fmt.Println(tv)
	//能夠經過指針來引用傳遞
	testPointArr(&tv)
	//此時就改變了tv的值了 11,2,3
	fmt.Println(tv)

	//數組長度也是數組類型的一部分,若是長度不等至關於不同的類型
	//tv2 := [2]int{1,2}
	//testValArr(tv2) //此時是要報錯的由於函數接收3個長度的
	//tv3 := [...]int{1,2,3,4} //這個也是經過不了
	//testValArr(tv3)
	//tv4 := [...]int{1,3,4} //這個是經過的
	//testValArr(tv4)

	//輸出A-Z
	var myByte [26]byte
	for i := 0; i < 26; i++ {
		myByte[i] = 'A' + byte(i)//須要把i轉成byte類型
	}
	for i := 0; i < 26; i++ {
		fmt.Printf("%c ", myByte[i])
	}

	//求數組最大值
	var maxArr [7]int = [7]int{1,3,60,-2,80,50,2}
	//假設數組第一個值爲最大值,而後循環去比較
	maxIndex := 0
	maxVal := maxArr[0]
	for i,v := range maxArr {
		if maxVal < v {
			maxVal = v
			maxIndex = i
		}
	}
	fmt.Printf("\nmaxVal = %v, maxIndex = %v\n", maxVal, maxIndex)

	//求數組的平均值
	avgArr := [7]int{1,2,3,20,55,11,22}
	sum := 0
	for _,val := range avgArr {
		sum += val
	}
	fmt.Printf("avgArr的平均值爲= %0.2f\n", float64(sum) / float64(len(avgArr)))

	//隨機5個數,以及反轉數組
	var reverArr [5]int
	//須要一個隨機種子;要不每次隨機值都同樣
	rand.Seed(time.Now().UnixNano()) //使用納秒
	reverArrLen := len(reverArr);
	for i := 0; i < reverArrLen; i++ {
		reverArr[i] = rand.Intn(100) // 0<=n<100
	}
	fmt.Println(reverArr);
	//反轉思路, 第一個和最後一個交換, 第二個和倒數第二個交換,就能夠確認須要交換 len(arr)/2次;值能夠經過中間變量來解決
	tmp := 0 //中間臨時變量
	for i := 0; i < reverArrLen / 2; i++ {
		tmp = reverArr[reverArrLen - 1 - i] //存放後面的一個值
		reverArr[reverArrLen - 1 - i] = reverArr[i] //把後面一個值賦值爲前面的值
		reverArr[i] = tmp //前面的值賦值爲後面的值
	}
	fmt.Println(reverArr);
}

func testPointArr(arr *[3]int) {
	(*arr)[0] = 11 //(*arr)取指針的值
}
func testValArr(arr [3]int) {
	arr[0] = 11
}

二維數組數組

package main

import(
	"fmt"
)

func main() {
	var arr [3][5]float64 //定義一個二維數組

	for i := 0; i < len(arr); i++ {
		for j := 0; j < len(arr[i]); j++ {
			fmt.Printf("請輸入第%v個班級第%v學生的成績\n", i+1, j+1)
			fmt.Scanln(&arr[i][j]);
		} 
	}

	//遍歷二維數組
	for i,v := range arr {
		var sum float64 = 0
		for _,val := range v {
			sum += val
		}
		fmt.Printf("第%v個班級的平均成績%v\n", i+1, sum / float64(len(arr[i])))
	}
}
相關文章
相關標籤/搜索