zoukankan      html  css  js  c++  java
  • 五、数组、切片和字典

    1.数组:

    定义方式:

    固定长度:

    var x [5] int

    初始情况下是空值。

    这是定义固定长度的。

    然后 

    x[0] = 1

     x[1] = 2

     x[2] = 3

     x[3] = 4

     x[4] = 5

     一个个赋值

     

    不限制长度:

    var x = [...] int {
    
    1, 2, 3}

    这种情况必须有初始数据

    // 两种遍历方式
    
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        var a = [...] int {1, 2, 3}
    
        fmt.Println(len(a))
    
        // 遍历方式一
        for _, i := range(a) {
            fmt.Println(i)
        }
    
        // 遍历方式二
        for i := 0; i < len(a); i ++ {
            fmt.Println(a[i])
        }
    }

    2.切片

    顾名思义,就是从数组切下来的一块,下标同样是从0开始的,类似C++中的容器,长度不固定。

    有两个属性:

    容量(capacity长度(length

    两种定义方式:

    先声明,然后用make去初始化

    // 第一种定义方式
    // make(元素类型,len,capacity
    var x = make([]int, 5, 10)
    for i := 0; i < len(x); i++ {
        x[i] = i
    }
    fmt.Println(cap(x))
    fmt.Println(len(x))
    fmt.Println(x)
    // 直接从数组切下来一块
    // 第二种定义方式
    
    // 截取格式 y[low_index : high_index] 截取区间[low_index, high_index]
    
    var y = [5]int{1, 2, 3, 4, 5}
    
    var s1 = y[1:2]
    
    var s2 = y[:2]
    
    var s3 = y[1:]
    
    var s4 = y[:]
    
    fmt.Println(s1)
    
    fmt.Println(s2)
    
    fmt.Println(s3)
    
    fmt.Println(s4)

    append函数给切片增加元素:

    例如:

    var s1 = append( [] int {1, 2, 3}, 4, 5, 6}

    s1 此时为 [1, 2, 3, 4, 5, 6]

    内存的变化和C++中的vector类似:因为切片需要随机访问,所以需要一段连续的空间,如果元素数超过capacity,那么就会重新开辟一段新的空间,将元素复制过去

    3.字典

    类似C++标准库中的map,有一对 键值对 {key, value}key 就相当于索引.

    两种定义方式:

    初始化数据:

    // 实际上就是初始化数据嘛
    
    var x = map[string]string{
    
        "A": "Apple",
    
        "B": "Banane",
    
        "O": "Orange",
    
        "P": "Pear",
    
    }

    通过make函数初始化:

    var y map[string]string
    
    y = make(map[string]string)
    
    y["A"] = "Apple"
    
    y["B"] = "Banana"
    
    y["O"] = "Orange"
    
    y["P"] = "Pear"

    遍历:

    for key, val := range x {
    
        fmt.Println("Key:", key, "Value:", val)
    
    }

    如果对key或者value 的返回值不感兴趣,可以用_代替

    for _, val := range x {
    
        fmt.Println("Value:", val)
    
    }

    另外map支持随机访问,例如fmt.Println(x[“A”]) ,如果key没有对应的value那么值为空。

    删除:

    delete(x, “A”)

    删除key”A”的键值对

  • 相关阅读:
    linux 计划任务
    linux 进程管理
    PHP中global与$GLOBALS['']的区别
    php预定义变量
    linux 强制终止进程命令
    mysql取某表中数据的随机的方法
    mysql 连接 选库 查询
    Python 的异步 IO:Asyncio 简介
    并发和并行的区别
    asyncio模块中的Future和Task
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/9015688.html
Copyright © 2011-2022 走看看