Go lang学习第四篇数组,切片,关联数组,Range遍历


一、数组

package main

import "fmt"

func main()  {
    //这里我们创建一个数组`a`来存放刚好5个`int`
    //元素的类型和长度都是数组类型的一部分。数组默认是零值,对于`int`数组来说也就是0
    var a [5]int
    fmt.Println(a)

    //我们可以使用`array[index] = value`语法来设置数组
    //指定位置的值,或者用`array[index]`来得到值
    a[4] = 100
    fmt.Println("set:",a)
    fmt.Println("get",a[4])

    //使用内置函数`len`返回数组的长度
    fmt.Println(len(a))

    //使用这个语法在一行内初始化一个数组
    b := [5]int{1,2,3,4,5}
    fmt.Println("dcl",b)

    //数组的存储的类型是单一的,但是你可以组合这些数据来构造多位的数组结构
    var two [2][3]int
    for i := 0; i < 2; i++ {
        for j := 0; j < 3; j++ {
            two[i][j] = i+j
        }
    }
    fmt.Println("2d",two)
}

二、切片
package main

import "fmt"

func main()  {
    //不像数组,slice的类型仅有它所包含的元素决定(不像数组中还需要元素个数)
    //要创建一个长度非零的空slice,需要内建的方法`make`。
    //这里我们创建了一个长度为3的`string`类型的slice(初始化为零值)
    s := make([]string,3)
    fmt.Println("emp",s)

    //我们可以和数组一起设置和得到值
    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println("set:",s)
    fmt.Println("get:",s[2])

    //len返回slice的长度
    fmt.Println("len",len(s))

    //作为基本操作的补充,slice支持比数组更多的操作
    //其中一个是内建的`append`,它返回一个包含了一个或者多个新值的slice
    //注意我们接受返回有append返回新的slice值
    s = append(s,"d")
    s = append(s,"e","f")
    fmt.Println("apd",s)

    //slice也可以被`copy`。这里我们创建一个空的和`s`有相同长度的slice `c`,并且将`s`复制给`c`
    c := make([]string,len(s))
    copy(c,s)
    fmt.Println("cpy:",c)

    //slice支持通过`slice[low:high]`来进行切片操作
    //例如,这里得到一个包含元素`s[2]`,`s[3]`,`s[4]`的slice
    l := s[2:5]
    fmt.Println("sl1:",l)

    //这个slice从`s[0]`到(但是不包含)`s[5]`
    l = s[:5]
    fmt.Println("sl2:",l)

    //这个slice从(包含)`s[2]`到slice的后一个值
    l = s[2:]
    fmt.Println("sl3:",l)

    //我们可以在一行代码中申明并初始化一个slice变量
    t := []string{"g","h","i"}
    fmt.Println("dcl:",t)

    //slice可以组成多位数据结构。内部的slice长度可以不同,这和多位数组不同
    two := make([][]int,3)
    for i := 0; i < 3; i++ {
        innerLen := i+1
        two[i] = make([]int,innerLen)
        for j := 0; j < innerLen; j++ {
            two[i][j] = i+j
        }
    }
    fmt.Println("2d:",two)
}

三、关联数组
package main

import (
    "fmt"
)

func main(){
    //要创建一个空map,需要使用内建的make
    m := make(map[string]int)

    //使用典型的make[key] = val语法来设置键值对
    m["k1"] = 7
    m["k2"] = 13

    //使用例如`println`来打印一个map将会输出所有的键值对
    fmt.Println("map:",m)

    //使用name[key]来获取一个键的值
    v1 := m["k1"]
    fmt.Println("v1:",v1)

    //内建的delete可以从一个map中移除键值对
    delete(m,"k2")
    fmt.Println("map:",m)

    //当从一个map中取值时,可选的第二返回值指示这个键
    //是在这个map中。可以用来消除键不存在和键有零值
    //像0或者""产生的歧义
    _,prs := m["k2"]
    fmt.Println("prs:",prs)

    //你也可以通过这个语法在同一行申明和初始化一个新的map
    n := map[string]int{"foo":1,"bar":2}
    fmt.Println("map:",n)

}

四、Range遍历
package main

import "fmt"

func main()  {
    //这里我们使用range来统计一个slice的元素个数
    //数组也可以采用这种方法
    nums := []int{2,3,4}
    sum := 0
    for _,num := range nums{
        sum += num
    }
    fmt.Println("sum:",sum)

    //range在数组和slice中同样提供每个项的索引和值
    //上面我们不需要索引,所以我们使用空值定义符`_`来忽略它
    //有时候我们实际上是需要这个索引的
    for i,num := range nums{
        if num == 3{
            fmt.Println("index:",i)
        }
    }

    //range在map中迭代键值树
    kvs := map[string]string{"a":"apple","b":"banana"}
    for k,v := range kvs{
        fmt.Println("%s->%s\n",k,v)
    }

    //range在字符串中迭代unicode编码。
    //第一个返回值是rune的起始字节位置,然后第二个是rune自己
    for i,c := range "go"{
        fmt.Println(i,c)
    }
}
————————————————
版权声明:本文为CSDN博主「aliaichidantong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aliaichidantong/article/details/79033935

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值