一篇文章帶你瞭解 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 基礎之數組。如果在操作過程中有任務問題,記得下面討論區留言,我們看到會第一時間解決問題。

我是碼農星期八,如果覺得還不錯,記得動手點贊一下哈。感謝你的觀看。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/wCTVg79ZZuHhf8iLGIe12w