一篇文章带你了解Go语言基础之数组

狼窝 2020-10-22

一篇文章带你了解Go语言基础之数组

 前言
Hey,大家好呀,我是星期八,这次咱们继续学习Go基础之数组扒。

什么是数组
我的总结:一个变量,指向一块连续的,具有长度的,并且是相同类型的一块内存。

一篇文章带你了解Go语言基础之数组

如何定义数组

var 变量名 [元素个数]元素类型 

示例:

package main 
 
func main() { 
    //声明一个name_list数组,长度为100,里面只能放字符串 
    var name_list [100]string 
} 

注:

var 变量名 [元素个数]元素类型 等同于 var 变量名 变量类型 
所以 
var name1 [3]int != var name2 [4]int 
因为变量类型是不一样,不可以直接进行赋值 

一篇文章带你了解Go语言基础之数组

数组初始化

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) 
} 

报错

一篇文章带你了解Go语言基础之数组

似乎是不可以的,那我只用第一层试试呢。

package main 
 
import "fmt" 
 
func main() { 
  //定义一个三行两列的一个数组 
  var student_list = [...][2]string{ 
    // 列     列 
    {"张三", "李四"}, //行 
    {"王五", "小刘"}, //行 
    {"小七", "王八"}, //行 
  } 
  fmt.Println(student_list) 
} 

相关推荐