一篇文章帶你了解Go語言基礎之數組
作者:碼農星期八
這篇文章我們繼續介紹Go語言基礎知識,今天跟大家分享的是基礎數據類型之數組,一起來學習下吧~
前言
Hey,大家好呀,我是星期八,這次咱們繼續學習Go基礎之數組扒。
什么是數組
我的總結:一個變量,指向一塊連續的,具有長度的,并且是相同類型的一塊內存。
如何定義數組
- var 變量名 [元素個數]元素類型
示例:
- package main
- func main() {
- //聲明一個name_list數組,長度為100,里面只能放字符串
- var name_list [100]string
- }
注:
- var 變量名 [元素個數]元素類型 等同于 var 變量名 變量類型
- 所以
- var name1 [3]int != var name2 [4]int
- 因為變量類型是不一樣,不可以直接進行賦值
數組初始化
- package main
- import "fmt"
- func main() {
- //方式一,聲明不賦值
- //var name_list [10]int
- //fmt.Println(name_list) //結果:[0 0 0 0 0 0 0 0 0 0] 聲明不賦值,int類型默認是0,其他類型也有默認值
- //
- //方式二, 聲明沒有賦值完
- //var name_list [10]int = [10]int{1, 3}
- //fmt.Println(name_list) //結果:[1 3 0 0 0 0 0 0 0 0],沒有賦值完的,其他仍然是默認值
- //方式三,聲明完完全賦值
- //var name_list = [3]int{1, 6, 10} //使用類型推斷方式,同上
- //fmt.Println(name_list) //結果:[1 6 10],每個都有值,沒啥可說的
- //方式四,自動推斷個數
- //var name_list = [...]int{1, 2, 4, 5, 19} //...表示自動推斷個數,不會存在過多或者過少
- //fmt.Println(name_list) //結果:[1 2 4 5 19]
- //方式五,指定索引方式賦值,用的很少
- var name_list = [...]int{1: 66, 4: 11} //下標1賦值為66,下標4賦值11,其他默認值
- fmt.Println(name_list) //結果:[0 66 0 0 11]
- }
數組遍歷
- package main
- import "fmt"
- func main() {
- var name_list = [...]string{"張三", "李四", "王五", "小劉"}
- //方式一,普通for遍歷
- //for i := 0; i < len(name_list); i++ {
- //fmt.Println(name_list[i])
- //}
- //方式二,for range方式
- for index, name := range name_list {
- //index是每個的下標,name是值
- fmt.Println(index, name)
- }
- }
多維數組
二維數組
通常情況下,二維數組基本夠用,最多三維數組,再套娃就完犢子了。
定義一個二維數組
- package main
- import "fmt"
- func main() {
- //定義一個三行兩列的一個數組
- var student_list = [3][2]string{
- // 列 列
- {"張三", "李四"}, //行
- {"王五", "小劉"}, //行
- {"小七", "王八"}, //行
- }
- fmt.Println(student_list)
- }
循環二維數組
同理,定義一個二維數組需要兩層,循環也需要兩層。
- package main
- import "fmt"
- func main() {
- //定義一個三行兩列的一個數組
- var student_list = [3][2]string{
- // 列 列
- {"張三", "李四"}, //行
- {"王五", "小劉"}, //行
- {"小七", "王八"}, //行
- }
- //方式一,普通for循環
- //for i := 0; i < len(student_list); i++ {
- ////fmt.Println(student_list[i])//每行
- ///*
- // [張三 李四]
- // [王五 小劉]
- // [小七 王八]
- //*/
- //for j := 0; j < len(student_list[i]); j++ {
- // //每列
- // fmt.Println(student_list[i][j])
- //}
- //}
- //方式二,for range
- for _, v := range student_list {
- //fmt.Println(v) //每行
- /*
- [張三 李四]
- [王五 小劉]
- [小七 王八]
- */
- for _, b := range v {
- //每列
- fmt.Println(b)
- }
- }
- }
多維數組是否可以長度推導
代碼
- package main
- import "fmt"
- func main() {
- //定義一個三行兩列的一個數組
- var student_list = [...][...]string{
- // 列 列
- {"張三", "李四"}, //行
- {"王五", "小劉"}, //行
- {"小七", "王八"}, //行
- }
- fmt.Println(student_list)
- }
報錯
似乎是不可以的,那我只用第一層試試呢。
- package main
- import "fmt"
- func main() {
- //定義一個三行兩列的一個數組
- var student_list = [...][2]string{
- // 列 列
- {"張三", "李四"}, //行
- {"王五", "小劉"}, //行
- {"小七", "王八"}, //行
- }
- fmt.Println(student_list)
- }
注:可以得出結論,在第一層時,是可以實現長度自動推導的。
責任編輯:姜華
來源:
Go語言進階學習