zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    uboot nand erase 的显示错误修复
    Sougo for linux install.
    S3C6410移植uboot2010.3(2)基本的启动信息修改
    S3C6410移植uboot2010.3(4)uboot的dnw功能添加
    S3C6410移植uboot2010.3(3)正常化配置
    ubuntu乱码修复
    应老婆点(20070705 13:11:34)(新浪)
    克己慎独 2008923 13:32:00 (21ic)
    信任(20061229 14:16:32)(新浪)
    不要轻易承诺 2008926 14:42:00 (21ic)
  • 原文地址:https://www.cnblogs.com/believepd/p/10928276.html
Copyright © 2011-2022 走看看