zoukankan      html  css  js  c++  java
  • Go-slice

    切片

    1.定义一个切片然后应用一个定义好的数组。

    	var intarr [5]int = [...]int{1, 2, 3, 4, 5}
    	//切片是引用类型,长度是动态的,其他与数组一样
    	//左闭右开,表示取数组intarr下标1到3(不包含3)
    	a := intarr[1:3]
    
    

    2.make创建

    1)make创建可以指定切片的大小,容量

    2)没有给各元素赋值,那么就是默认值

    3)创建的底层数组,对外不可见,只能通过slice访问

    	//2.make  var 切片名 []type=make([]type,len,[cap]) cap>=len
    	//                    数据类型          长度 容量可选
    
    	var s1 []int = make([]int, 4, 10)
    
    	s1[20] = 20
    
    	//3.定义一个切片,直接指定具体的数组,原理类似make
    	var strslice []string = []string{"jin", "wei", "chang"}
    	fmt.Println(strslice)
    

    4.切整个数组

    //左边为空表示从头开始,右边为空表示到底
    var slice=arr[:]
    

    5.切片定义完后,要引用到一个数组或make一个空数组才能使用

    6.切片可再切

    	var arr1 [5]int = [...]int{10, 20, 30, 40, 50}
    	s := arr1[1:4]  //20,30,40
    	s1:=s[1:2]  //30
    

    7append()

    向切片中追加数据,使用append函数,原理是底层重新创建一个数组,切片再次引用过去。

    	var slice3 []int = []int{100, 200, 300}
    	slice3 = append(slice3, 400, 500, 600)
    	//只能追加切片(切片后的3个点不能少),不能追加数组,
    	slice3 = append(slice3, slice3...)
    	fmt.Println("slice3", slice3)
    

    8.copy

    1)2个切片才能使用copy

    2)2者空间独立,不相互影响

    3)当S2定义长度小于3时,会将S1按下标顺序依次取出放入S2,如果S2长度为1,那么就只能放入12

    	//将S1的3个元素复制到S2,如要2个切片完全一样,就将s2定义长度为3
        var s1 []int = []int{12, 13, 14}
    	var s2 = make([]int, 5)
    	copy(s2, s1)
    	fmt.Println(s1) //[12 13 14]
    	fmt.Println(s2) //[12 13 14 0 0]
    

    9 string是个引用类型,底层是个byte数组,也能切片

    string不能用切片直接修改,要先转换成byte切片,再修改,然后再转换回string,

    string中只能是字母和数字,不能有中文,会出现乱码

    	str := "abc@jinwei"
        s2 := []byte(str)
    	s2[0] = 'p'
    	str = string(s2)
    	fmt.Println(str) //pbc@jinwei
    

    转换为[]rune,按字符处理,兼容汉字

    	str1 := "天龙八部"
    	s3 := []rune(str1)
    	s3[0] = 'p'
    	str1 = string(s3)
    	fmt.Println(str1)//p龙八部
    

    斐波那契数列

    func main() {
    	ss := fbn(99)s
    	fmt.Println(ss)
    }
    
    func fbn(n int) []uint64 {
    	var fbnslice = make([]uint64, n)
    	fbnslice[0] = 1
    	fbnslice[1] = 1
    
    	for i := 2; i < n; i++ {
    		fbnslice[i] = fbnslice[i-1] + fbnslice[i-2]
    	}
    	return fbnslice
    
    }
    
    
  • 相关阅读:
    淘宝长仁:JVM性能指标的理论极限和衡量方法(TaobaoJVM)
    你不知道的5个JVM命令行标志
    Java 内存模型 JMM
    Java虚拟机深入研究
    java内存区域——daicy
    Java里的堆(heap)栈(stack)和方法区(method)
    JVM学习笔记-操作数栈(Operand Stack)
    c# 网页打印全流程
    备忘录模式实例1
    加密程序-注册方法实现
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/14154447.html
Copyright © 2011-2022 走看看