• golang 数组、切片、map


    一、数组(类似python的list)

    数组的长度一旦定义了就不能动态增长。并且存储的数据类型必须相同。

    创建方法:

    var 数组名 [长度]数据类型

    例如:

    package main
    import "fmt"
    
    func main(){
        var l [5]int //定义l名字,长度为5,数据类型为int的数组
        l[0] = 1    //赋值
        l[1] = 2    
        l[2] = 3
        l[3] = 4
        fmt.Println(l)  
        fmt.Println(l[2])
        fmt.Println(l[1:3]) //输出1到3的数组
        fmt.Println(l[0:]) //0到结尾
        fmt.Println(l[:3])  //0到3
    
    }
    
    ##结果##
    [1 2 3 4 0]
    3
    [2 3]
    [1 2 3 4 0]
    [1 2 3]
    

      

    数组的四种初始化方式

    例如:

    var s1 [3]int = [3]int{1,2,3}
    fmt.Println("s1",s1)
    var s2 [4]int = [...]int{5,6,7,8} //[...]是固定写法
    fmt.Println("s2",s2)
    var s3 = [2]int{9,10} //第一种的简化
    fmt.Println("s3",s3)
    var s4 = [...]int{3:43,1:41,0:40,2:42} //类似键值对
    fmt.Println("s4",s4)
    
    
    
    ##结果##
    s1 [1 2 3]
    s2 [5 6 7 8]
    s3 [9 10]
    s4 [40 41 42 43]
    

      

     数组的遍历

    例如:

    var s4 = [...]int{3:43,1:41,0:40,2:42} //类似键值对
    fmt.Println("s4",s4)
    	
    for index,value := range s4{
    fmt.Println(index,value)
    }
    
    #结果##
    0 40
    1 41
    2 42
    3 43
    

      

    二、slice切片

    1、切片是数组的引用
    2、切片的使用类似数组,如遍历
    3、切片的长度是可变的

    创建语法
    var 切片名 []类型
    如:

    var qiepian []int
    

      

    切片例子:

    ###例子一
    var suzhu [4]int = [...]int{5,6,7,8} slice := suzhu[1:4] //1到4的值,不包含4 fmt.Println(suzhu) fmt.Println(slice) fmt.Println("切片的容量",cap(slice)) ##结果 [5 6 7 8] [6 7 8] 切片的容量 3

    ###例子二、使用make创建切片 var slice []int = make([]int,4,10) //类型,大小(长度),容量(可选),容量必须大于长度 slice[0] = 10 slice[1] = 11 fmt.Println(slice) ##结果## [10 11 0 0] ###例子三 var slice []int = []int {2,4,6} fmt.Println(slice) ##结果## 2 4 6


    切片的append追加

    例如:

    var slice []int = []int {2,4,6}
    fmt.Println(slice)
    //使用append直接追加切片内容(类似python list的append)
    slice = append(slice,8,10)
    fmt.Println(slice)
    slice = append(slice,slice...) //追加切片,...是固定写法
    fmt.Println(slice)
    
    ###结果###
    [2 4 6]
    [2 4 6 8 10]
    [2 4 6 8 10 2 4 6 8 10]
    

      

    切片的copy操作

    使用copy内置函数

    例如:

    var slice []int = []int {2,4,6}
    fmt.Println(slice)
    var slice2 []int = make([]int,5) 
    fmt.Println(slice2)
    copy(slice2,slice) //将slice复制给slice2
    fmt.Println(slice)
    fmt.Println(slice2
    
    ##结果##
    [2 4 6]
    [0 0 0 0 0]
    [2 4 6]
    [2 4 6 0 0]
    

      

    使用切片改变字符串的内容

    例子:

    var str string = "hello"
    fmt.Println(str)
    arr := []byte(str)
    arr[1] = 'a' //转成字符串
    arr1 := []rune(str) //中文转换
    arr1[0] = '狗' 
    fmt.Println(arr)
    str = string(arr)
    fmt.Println(str)
    str = string(arr1)
    fmt.Println(str)
    
    ##结果##
    hello
    [104 97 108 108 111]
    hallo
    狗ello
    

      

    map(类似python的dict)

    map是key-value数据结构(类似python的dict)
    map是无序存储的

    创建map语法

    var map 变量名 map[keytype]valuetype

    如:

    var m1 map[string]string
    var m2 map[string]int
    var m3 map[int]string
    var m4 map[string]map[string]string
    

      

    使用例子:

    package main
    import "fmt"
    
    func main(){
        var m1 map[string]string
        //在使用map前,需要先make,make的作用技术给map分配数据空间
        m1 = make(map[string]string)
        m2 := map[string]string{  //使用方式二
            "a1" : "q1",
            "a2" : "a2",
        }
        m1["s1"] = "亚索"
        m1["s2"] = "盖伦" 
        fmt.Println(m1)
        fmt.Println(m1["s1"])
        fmt.Println(m2)
    }
    
    ###结果###
    map[s1:亚索 s2:盖伦]
    亚索
    map[a1:q1 a2:a2]
    

      

    map的增删改查

    增、改

    map[key] = value //没有就增加,存在就修改

    delete(map,key)

    map[key]   //对应的value,和python的dict一样

  • 相关阅读:
    80386寄存器
    删除 Windows 旧 OS 加载器
    [C#] Socket 通讯,一个简单的聊天窗口小程序
    [erl] erlang 进程注册和注销
    VB中 '&' 和 '+' 号的区别
    如何成为一个牛逼的程序员
    [VB] if 判断语句 和 If、IIf函数的比较
    C#中通过反射方法获取控件类型和名称
    薪资至少10K的一道题,你能拿下吗
    Jass 技能模型定义(—):半人马酋长的反击光环
  • 原文地址:https://www.cnblogs.com/zhangb8042/p/10511779.html
Copyright © 2020-2023  润新知