golang数组

1 数组定义

// 格式
var  数组变量名  [元素数量]元素数据类型

// 定义一个长度为3、元素类型为int的数组a
var a [3]int

注意:数组长度也是数组类型的判断依据(比如[5]int[10]int是不同的类型)

2 访问数组元素

可以通过下标进行访问,下标是从0开始,若下标超过有效范围会触发panic

3 初始化数组

  • 不赋值则会给默认值(比如int默认值是0)
  • 赋值必须要有=号 🟩
  • 不完全赋值的,按下标排序,没分配到的的仍然为默认值
package main

import "fmt"

func main() {
   var test1 [3]int
   var test2 = [3]int{5, 6}
   var test3 = [3]string{"bei", "shang", "guang"}
   fmt.Println(test1)
   fmt.Println(test2)
   fmt.Println(test3)
}


// [0 0 0]
// [5 6 0]
// [bei shang guang]

4 自动识别元素数量 [...]

func main() {    
    var test [3]int
    var num = [...]int{1, 2}
    var city = [...]string{"beijing", "shanghai", "shenzhen"}
    fmt.Println(test)
    fmt.Println(num)
    fmt.Printf("type of num:%T\n", num)
    fmt.Println(city)
    fmt.Printf("type of city:%T\n", city)
}

5 多维数组

指定元素个数

[3][2] 表示这个数组有3个元素,元素也是数组,每个 元素数组 又包括2个元素

func main() {
   a := [3][2]string{
      {"冰箱", "电脑"},
      {"苹果", "香蕉"},
      {"草坤子", "猪八子"},
   }
   fmt.Println(a)
}

不指定个数

注意:省略个数 只能省略第一层的(也就是数组a 的元素个数)

func main() {
   a := [...][2]string{
      {"111", "2g2"},
      {"222", "p2p"},
   }
   b := [...][2]string{
      {"cao", "sss"},
      {"asdf", "qwer"},
      {"q", "t"},
   }
   fmt.Println(a)
   fmt.Println(b)
   fmt.Printf("type a :%T\n", a)
   fmt.Printf("type b :%T\n", b)
}

6 网站习题

https://www.liwenzhou.com/posts/Go/05_array/#autoid-1-5-0

从数组[1, 3, 5, 7, 8]中找出和为8的两个元素的下标分别为(0,3)(1,2)

func main() {
   a := [...]int{1, 3, 5, 7, 8}
   for x, y := range a {
      for i := 1; i <= len(a)-1-x; i++ {
         if y+a[i+x] == 8 {
            fmt.Printf("(%d,%d) ", x, i+x)
         }
      }
   }
}

=

=

=

数组遍历详解

遍历一个二维数组

func main() {
        a := [3][2]string{
                {"北京", "上海"},
                {"广州", "深圳"},
                {"成都", "重庆"},
        }
        for _, v1 := range a {
                for _, v2 := range v1 {
                        fmt.Printf("%s\t", v2)
                }
                fmt.Println()
        }
}


//解析:
range a 返回的是index和对应的值
因此 _, v1 := range a 相当于忽略index,将键值赋值给 v1

外层第一轮循环 v1={"北京", "上海"}
然后进入内层 for _, v2 := range v1
同理 range v1 返回的是index和对应的值
_, v2 := range v1 相当于把{"北京", "上海"}里面的值依次赋值给 v2
然后打印v2

// 注1
\t 是制表符,使输出内容等间距对齐

// 注2
最后的 fmt.Println() 是打印一个换行,外层每循环一次就换行
如果没有这一句,输出就都在同一行

=

=

数组相关语句格式

定义
// var  数组变量名  [元素数量]元素数据类型

// 定义一个长度为3、元素类型为int的数组 a
var a [3]int
定义并初始化
var test2 = [3]int{5, 6}   // [5 6 0]
var test3 = [3]string{"bei", "shang", "guang"}
定义时自动识别元素数量
var num = [...]int{1, 2}   // [1 2]
var city = [...]string{"beijing", "shanghai", "shenzhen"}
定义多维数组
a := [3][2]string{
      {"冰箱", "电脑"},
      {"苹果", "香蕉"},
      {"草坤子", "猪八子"},
   }
定义多维数组自动识别元素数量
   a := [...][2]string{
      {"111", "2g2"},
      {"222", "p2p"},
   }

   b := [...][2]string{
      {"cao", "sss"},
      {"asdf", "qwer"},
      {"q", "t"},
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值