• Go:slice


    一、切片创建方式

    func main() {
    	// 创建切片方式1
    	// 让切片引用一个数组
    	array := [...]int{1, 2, 3, 4}
    	slice1 := array[1:3]
    	fmt.Println(slice1) // [2 3]
    
    	// 创建切片方式2
    	// 通过make方式创建切片
    	var slice2 []int // 这是切片定义,需要让其引用一个数组,或make一下才能使用!!!
    	slice2 = make([]int, 4)
    	fmt.Println(slice2) // [0 0 0 0]
    
    	var slice3 = make([]int, 4, 8) // 8为容量(cap),可选
    	fmt.Println(slice3) // [0 0 0 0]
    
    	slice4 := make([]string, 4)
    	fmt.Println(slice4) // [   ]
    	fmt.Println(cap(slice4)) // 4
    
    	// 创建切片方式3
    	// 定义一个切片,直接就指定具体数组,原理类似make方式
    	var slice5 = []float64{1.11, 2.22, 3.33}
    	slice6 := []string{"a", "b"}
    	fmt.Printf("%.1f
    ", slice5) // [1.1 2.2 3.3]
    	fmt.Println(slice6) // [a b]
    }

    方式1与方式2的区别:

    • 方式1是直接引用数组,这个数组是事先存在的,程序员是可操作的;
    • 方式2是通过make来创建切片,make会创建一个数组,而切片就是引用这个数组,这个数组是由切片在底层进行维护,程序员不可操作。

    二、切片的添加操作

    func main() {
    	slice := []string{"a", "b"}
    	fmt.Println(slice) // [a b]
    	slice = append(slice, "c", "d")
    	fmt.Println(slice) // [a b c d]
    	slice = append(slice, slice...)
    	fmt.Println(slice) // [a b c d a b c d]
    }
    

    三、切片的拷贝操作

    # 参数的数据类型都是切片
    copy(param1, param2)
    
    func main() {
    	slice1 := []int{1, 2, 3}
    	slice2 := make([]int, 5)
    	slice3 := make([]int, 2)
    	copy(slice2, slice1)
    	fmt.Println(slice2) // [1 2 3 0 0]
    	copy(slice3, slice1)
    	fmt.Println(slice3) // [1 2]
    }
    

    四、string与slice关系

    string底层是一个byte数组,因此string也可以进行切片操作(这里不演示)。

    string是不可变的,因此不能通过 str[0] = 'xx' 方式来修改字符串;如果需要修改字符串,可以先将 string 转成 []byte 或者 []rune 类型,修改后再转回。

    func main() {
    	str := "Hello"
    	sli := []byte(str)
    	sli[0] = 'h'
    	fmt.Println(sli) // [104 101 108 108 111]
    	str = string(sli)
    	fmt.Println(str) // hello
    
    	// 推荐使用下面方式(支持中文)
    	s := []rune(str)
    	s[0] = '吖'
    	str = string(s)
    	fmt.Println(str) // 吖ello
    }
    
  • 相关阅读:
    23种设计模式(1)
    设计模式六大原则
    关于设计模式
    《代码整洁之道》整理
    MySQL 查询优化
    互联网流量下的分层实验平台是咋做的
    机器学习web服务化实战:一次吐血的服务化之路
    RabbitMQ和Kafka到底怎么选(二)?
    RabbitMQ和Kafka到底怎么选?
    基于海量词库的单词拼写检查、推荐到底是咋做的?
  • 原文地址:https://www.cnblogs.com/believepd/p/10928276.html
Copyright © 2020-2023  润新知