package main
import "fmt"
/*
* 一維數組:var variable_name [SIZE] variable_type
* 一維數組初始化:
* 固定長度:var variable_name = [SIZE] variable_type {value1, value2, ..., valueSIZE}
* 根據內容:var variable_name = [...] variable_type {value1, value2, ...}
*
* 多維數組:var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
* 多維數組初始化:
* 固定長度:var variable_name = [SIZE1][SIZE2]...[SIZEN] variable_type {{raw1_value1, raw1_value2, ...}, {raw2_value1, raw2_value2, ...}, {...}}
* 根據內容:var variable_name = [][]...[] variable_type {{raw1_value1, raw1_value2, ...}, {raw2_value1, raw2_value2, ...}, {...}}
*
*/
// 聲明長度與內容相等的數組
// 初始化數組中 {} 中的元素個數不能大於 [] 中的數字。
// 如果忽略 [] 中的數字不設置數組大小,Go 語言會根據元素的個數來設置數組的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
/*
* 函數調用傳遞數組參數
* 方式1:不指定數組長度,由外部傳入
*/
func getAverage(arr []int, size int) float32 {
var i, sum int
var avg float32
for i = 0; i < size; i++ { // go 的語法不允許 ++i
sum += arr[i]
}
avg = (float32)(sum / size)
return avg
}
/*
* 函數調用傳遞數組參數
* 方式2:指定數組長度
* 數組聲明指定數組長度時,要求傳入數組在聲明時也必須有相同的長度,
* 當聲明指定長度時,則可以省略數組長度的參數,只保留一個數組即可。
*/
func getAverageSpecialLen(arr [4]int) float32 {
var i, sum int
var avg float32
for i = 0; i < len(arr); i++ {
sum += arr[i]
}
// 所有的變量賦值,如果涉及類型轉換,必須顯示進行類型轉換,否則編譯失敗,提示語法錯誤。
avg = (float32)(sum / len(arr))
return avg
}
// 獲取二維數組的平均值
func getAverageMulti(arr [][]int, rowNum int, colNum int) float32{
var i, j, sum int
var avg float32
for i = 0; i < rowNum; i++ {
for j = 0; j < colNum; j++ {
// 多維數組的操作方式,通過下標操作 variable_name [一維索引][二維索引]...[N維索引]
sum += arr[i][j]
}
}
avg = (float32)(sum / rowNum / colNum)
return avg
}
// 獲取二維數組的平均值,通過引用傳遞數組獲取每行平均值
// 注意引用傳遞數組的表達方式:variable_name *[] variable_type
// 引用傳遞數組,必須給定數組長度,否則無法使用 avgs[index] 的方式賦值
func getAverageMultiRef(arr [3][4]int, avgs *[3] float32){
var i, j, sum int
rowNum := len(arr)
colNum := len(arr[0])
for i = 0; i < rowNum; i++ {
sum = 0
for j = 0; j < colNum; j++ {
sum += arr[i][j]
}
// 聲明 avgs 爲引用傳遞,操作引用數組時不需要使用 *avgs[] 的方式來操作,直接使用 avgs[index] 即可。
avgs[i] = (float32)(sum / colNum)
}
}
func main() {
fmt.Println("array")
fmt.Println(balance, len(balance))
var balanceInt = []int {1000, 2, 3, 17, 50}
average := getAverage(balanceInt, len(balanceInt))
fmt.Println("getAverage = ", average)
var balanceIntLen = [4]int {1000, 2, 3, 17}
averageLen := getAverageSpecialLen(balanceIntLen)
fmt.Println("getAverageSpecialLen = ", averageLen)
var balanceMulti = [][]int {{1000, 2, 3, 17}, {1, 3, 5, 7}, {2, 4, 6, 8}}
fmt.Println("raw count=", len(balanceMulti), ", col count=", len(balanceMulti[0]))
fmt.Println("getAverageMulti=", getAverageMulti(balanceMulti, len(balanceMulti), len(balanceMulti[0])))
var balanceMultiRef = [3][4]int {{1000, 2, 3, 17}, {1, 3, 5, 7}, {2, 4, 6, 8}}
var averageMultiRef [3] float32
// 引用傳遞數組,使用標識符 &
getAverageMultiRef(balanceMultiRef, &averageMultiRef)
for i := 0; i < len(averageMultiRef); i++ {
fmt.Println("line", i, "average=", averageMultiRef[i])
}
}
輸出結果
array
[1000 2 3.4 7 50] 5
getAverage = 214
getAverageSpecialLen = 255
raw count= 3 , col count= 4
getAverageMulti= 88
line 0 average= 255
line 1 average= 4
line 2 average= 5