Golang——数组遍历、最大值、求和、多维数组
數(shù)組:
- 數(shù)組就是存儲(chǔ)數(shù)據(jù)長(zhǎng)度固定的容器,存儲(chǔ)多個(gè)數(shù)據(jù)的數(shù)據(jù)類型要一致。
- 數(shù)組定義完成后,可以對(duì)數(shù)組進(jìn)行賦值操作。數(shù)組是通過(guò)下標(biāo)來(lái)進(jìn)行操作的,下標(biāo)的范圍是從0開(kāi)始到數(shù)組長(zhǎng)度減1的位置。
特點(diǎn):
索引:
概念:數(shù)組中數(shù)據(jù)的編號(hào)方式, 編號(hào)從0開(kāi)始
作用:訪問(wèn)數(shù)組容器中的空間位置
數(shù)組在創(chuàng)建完畢后, 即使沒(méi)有賦值, 也可以取出, 但取出的元素都是默認(rèn)初始化值.
數(shù)組元素訪問(wèn):
格式:數(shù)組名 [索引];
數(shù)組靜態(tài)初始化:
初始化:創(chuàng)建完后馬上賦值的行為叫初始化
靜態(tài)初始化:在創(chuàng)建數(shù)組時(shí),直接將元素確定
動(dòng)態(tài)初始化:golang中只有靜態(tài),但是可以使用切片完成動(dòng)態(tài)數(shù)組的操作,但是切片不是數(shù)組
定義格式:
var 數(shù)組名 [元素?cái)?shù)量] 數(shù)據(jù)類型 var arr [5] int數(shù)組賦值格式1:
var 數(shù)組名 [元素?cái)?shù)量] 數(shù)據(jù)類型 = [元素?cái)?shù)量] 數(shù)據(jù)類型 {數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3...}數(shù)組賦值格式2:
數(shù)組名 := [元素?cái)?shù)量] 數(shù)據(jù)類型 {數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3...}全部初始化:
// 定義了5的長(zhǎng)度,最多給5個(gè)數(shù)據(jù),可以少不可以多,否則報(bào)越界異常 // var arr [5] int = [5] int {1,2,3,4,5} var arr = [5] int {1,2,3,4,5} // 可以簡(jiǎn)化成這樣寫(xiě)部分初始化:
// 定義了5的長(zhǎng)度,最多給5個(gè)數(shù)據(jù),可以少不可以多,否則報(bào)越界異常 arr := [5] int {1,2}指定元素初始化:
數(shù)組名 := [元素?cái)?shù)量] 數(shù)據(jù)類型 {索引1:數(shù)據(jù),索引2:數(shù)據(jù)} arr := [5] int {0:1,1:2}演示:
func main() {Demo01() }func Demo01() {// 靜態(tài)初始化格式1:var arr [5]int = [5]int{1, 2, 3, 4, 5}println("靜態(tài)初始化格式1:", arr[1])// 靜態(tài)初始化格式2:arr2 := [5]int{1, 2, 3, 4, 5}println("靜態(tài)初始化格式2:", arr2[1])// 部分初始化:arr3 := [5]int{0: 1, 1: 2}println("部分初始化:", arr3[1])// 靜態(tài)初始化:arr4 := [...]int{1, 2, 3}println("動(dòng)態(tài)初始化格式1:", arr4[1])// 靜態(tài)初始化2:也可以先定義,后面再賦值var arr5 [5]intarr5[0] = 1arr5[1] = 2for i := 0; i < len(arr5); i++ {println(arr5[i])} }數(shù)組長(zhǎng)度是類型的一部分,也就是說(shuō),元素類型相同,但數(shù)組長(zhǎng)度不同的不屬同一類型
func main() {var d1 [3]intvar d2 [2]intd1 = d2 // 錯(cuò)誤: cannot use d2 (type [2]int) as type [3]int in assignment }對(duì)于結(jié)構(gòu)等復(fù)合類型,可省略元素初始化表達(dá)式中的類型標(biāo)簽
func main() {type user struct {name stringage byte}// 結(jié)構(gòu)體類型的數(shù)組,最終是由編譯器判斷數(shù)組長(zhǎng)度u := [...]user{ // ... 代表省略{"韓信", 20},{"露娜", 18},}fmt.Println(u) // [{韓信 20} {露娜 18}] }在多維數(shù)組定義中,僅第一緯度允許使用...
func main() {a := [2][2]int{{1, 2}, {3, 4}}b := [...][2]int{{10, 20}, {30, 40}}c := [...][2][2]int{{{1, 2}, {3, 4}}, {{10, 20}, {30, 40}}}fmt.Println(a)fmt.Println(b)fmt.Println(c) }內(nèi)置函數(shù)len和cap都返回第一緯度長(zhǎng)度
func main() {a := [2]int{}b := [...][2]int{{10, 20}, {30, 40}, {50, 60}}println(len(a), cap(a))println(len(b), cap(b))println(len(b[1]), cap(b[1])) }如果數(shù)組元素類型支持= =、!=操作符,那么數(shù)組也支持比較操作
func main() {var a, b [2]intfmt.Println(a == b) // truec := [2]int{1, 2}d := [2]int{3, 4}fmt.Println(c == d) // falsevar e, f [2]map[string]intfmt.Println(e == f) // 無(wú)效運(yùn)算: e == f (在 [2]map[string]int 中未定義運(yùn)算符 ==) }索引越界異常:
func main() {Demo01() }func Demo01() {// 現(xiàn)在數(shù)組有5個(gè)元素,索引最大為4,如果去取索引5的值,就會(huì)報(bào)索引越界var arr [5]int = [5]int{1, 2, 3, 4, 5}println(arr[5])出現(xiàn)原因:數(shù)組長(zhǎng)度為5,索引范圍是0~4,但是卻訪問(wèn)了一個(gè)5的索引。
解決方案: 將錯(cuò)誤的索引修改為正確的索引范圍即可!
數(shù)組遍歷:
數(shù)組遍歷:就是將數(shù)組中的每個(gè)元素分別獲取出來(lái),就是遍歷。遍歷也是數(shù)組操作中的基石。
func Demo02() {arr := [5]int{1, 2, 3, 4, 5}for _, v := range arr {fmt.Println("Value:", v)} }數(shù)組作為函數(shù)參數(shù):
函數(shù)中修改數(shù)組中的值,不會(huì)影響到原數(shù)組
格式:
func 函數(shù)名 (數(shù)組){函數(shù)體}// 調(diào)用 函數(shù)名(數(shù)組)演示:
func main() {arr := [5]int{1, 2, 3, 4, 5}Demo03(arr) }func Demo03(arr [5]int) {for _, v := range arr {fmt.Println("Value:", v)} }數(shù)組值比較:
func main() {b := Demo04()if b {fmt.Println("數(shù)據(jù)相同")} else {fmt.Println("數(shù)據(jù)不同")} }func Demo04() bool {b := truearr1 := [5]int{1, 2, 3, 4, 5}//arr2 := [5]int{1, 2, 3, 4, 5}arr2 := [5]int{6, 7, 8, 9, 10}// 先判斷長(zhǎng)度,再判斷數(shù)據(jù)if len(arr1) == len(arr2) {// 長(zhǎng)度一樣就判斷數(shù)據(jù)for i := 0; i < len(arr1); i++ {// 如果一樣的話就跳過(guò)本次循環(huán),繼續(xù)下一個(gè)數(shù)據(jù)對(duì)比if arr1[i] == arr2[i] {continue// 數(shù)據(jù)不同則返回內(nèi)容結(jié)束循環(huán)} else {b = falsebreak}}// 長(zhǎng)度不同則返回內(nèi)容結(jié)束循環(huán)} else {b = false}return b }數(shù)組獲取最大值、最小值、求和:
實(shí)現(xiàn)思路:
演示:
func main() {Demo05() }func Demo05() {arr := [5]int{1, 2, 3, 4, 5}// 定義最大值、最小值、求和變量max := arr[0]min := arr[0]sum := 0for i := 0; i < len(arr); i++ {// 循環(huán)判斷數(shù)組的元素是否小于自定義的最大值,如果是就把值賦值給max,作為當(dāng)前最小值if arr[i] > max {max = arr[i]}// 循環(huán)判斷數(shù)組的元素是否小于自定義的最小值,如果是就把值賦值給max,作為當(dāng)前最小值if arr[i] < min {min = arr[i]}sum += arr[i]}fmt.Println("最大值:", max)fmt.Println("最小值:", min)fmt.Println("數(shù)組數(shù)據(jù)總和:", sum)fmt.Println("平均值:", sum/len(arr)) }// 判斷最長(zhǎng)的元素 func Demo06() {arr := [...]string{"娜可露露", "雅典娜", "韓信", "李白"}max := arr[0]for i := 0; i < len(arr); i++ {if len(arr[i]) > len(max) {max = arr[i]}}fmt.Println(max) }二維數(shù)組:
概念:
二維數(shù)組也是一種容器,不同于一維數(shù)組,該容器存儲(chǔ)的都是一維數(shù)組容器
全部初始化格式:
Var 變量名 [m] [n] int = [m] [n] int {{數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3},{數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3}}部分初始化格式:
// 沒(méi)有被初始化的索引系統(tǒng)會(huì)賦上默認(rèn)值 Var 變量名 [m] [n] int = [m] [n] int {{數(shù)據(jù)1,數(shù)據(jù)2},{數(shù)據(jù)1}}指定初始化格式:
// 沒(méi)有被初始化的索引系統(tǒng)會(huì)賦上默認(rèn)值 Var 變量名 [m] [n] int = [m] [n] int {n{索引:數(shù)據(jù)},n{索引:數(shù)據(jù)}}說(shuō)明:
var 變量名 [m][n] int
m表示這個(gè)二維數(shù)組,可以存放多少個(gè)一維數(shù)組
n表示每一個(gè)一維數(shù)組,可以存放多少個(gè)元素
演示:
// 三種方式定義二維數(shù)組 func Demo08() {arr := [2][3]int{{1, 2, 3}, {4, 5, 6}}arr2 := [2][3]int{{1, 2}, {4}}arr3 := [2][3]int{0: {0: 1, 1: 2, 2: 3}, 1: {0: 4, 1: 5, 2: 6}}// arr4 := [...][...]int{{1, 2, 3}, {4, 5, 6}, {1, 2, 3}, {4, 5, 6}} 一維數(shù)組個(gè)數(shù)可以用... 但是一維數(shù)組長(zhǎng)度不可以 會(huì)報(bào)錯(cuò):array outside of array literalarr4 := [...][3]int{{1, 2, 3}, {4, 5, 6}, {1, 2, 3}, {4, 5, 6}}fmt.Println("arr:", arr)fmt.Println("arr2:", arr2)fmt.Println("arr3:", arr3)fmt.Println("arr4:", arr4) }二維數(shù)組遍歷:
理解是理解,用也會(huì)用,但是這個(gè)寫(xiě)法,看著真亂,go的語(yǔ)法真丑
len(二維數(shù)組名):打印一維數(shù)組個(gè)數(shù)
len(二維數(shù)組[索引]):打印一維數(shù)組的長(zhǎng)度
演示:
func Demo09() {arr := [2][3]int{{1, 2}, {4, 5, 6}}fmt.Println(len(arr)) // 一維數(shù)組的個(gè)數(shù)fmt.Println(len(arr[1])) // 一維數(shù)組的長(zhǎng)度for i := 0; i < len(arr); i++ { // 外循環(huán)是二維數(shù)組for j := 0; j < len(arr[0]); j++ { // 內(nèi)循環(huán)是一維數(shù)組fmt.Print(arr[i][j])}}// for循環(huán)也可以,但是拿到的v是二維數(shù)組的個(gè)數(shù),要用循環(huán)嵌套再遍歷出一維數(shù)組的數(shù)據(jù)for _, v := range arr {fmt.Println(v)for _, data := range v {fmt.Println(data)}} }總結(jié)
以上是生活随笔為你收集整理的Golang——数组遍历、最大值、求和、多维数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: sqllyog可以连接oracle_03
- 下一篇: 意大利_【解读】去意大利留学,一定要学意