• 【笔记】GO内建容器数组


    go内建容器--数组

    1.数量要写在类型的前面
    2.可通过_省略变量
    3.不仅是range,任何地方都可以使用_来省略变量
    4.如果只要i,则可写成for i := range numbers
    5.[10]int和[5]int是不同的类型
    6.调用func f(arr [10]int)会对数组进行拷贝
    7.在go语言中一般不直接使用数组

    // 定义数组
    var arr1 [5]int
    arr2 := [3]int{1, 2, 3}
    arr3 := [...]int{1, 2, 3, 4, 5}
    var gridint = [4][5]int
    var gridbool = [4][5]bool
    
    // 遍历数组
    for i := 0; i<len(arr3); i++{
    	fmt.Println(arr3[i])
    }
    
    // 使用range遍历
    for i := range arr3{  
    	arr2[i]
    }
    
    //i, v 可以获取对应元素的值, 如果不想要下标,可通过_省略内容
    for i, v := range arr3{  
    	fmt.Println(i, v)
    }
    for _, v := range arr2{  
    	fmt.Println(v)
    }
    
    //求和
    sum := 0
    for _, v := range arr2{  
    	sum += v
    }
    
    // 数组是值类型,在go语言中,[]int和[5]int意义不同,[]int是数组的切片,[5]int才是真正的数组,且不同长度的数组,类型不一样, 如[5]int,传入长度非5的数组会报错,因为是值类型,在里面改变的值,在外面是不会改变的,例如将arr的第一个元素改为100,外面的arr是不会改变的,也就是说,值类型在操作的时候是会进行拷贝
    
    func printArray(arr [5]int){
    	for i, v := range arr{  
    		fmt.Println(i, v)
    	}
    }
    printArray(arr1)
    printArray(arr3)
    printArray(arr2)//会报错
    

    为什么要使用range?

    因为意义明确同时还比较美观

    c++没有类似于range的能力,java以及python中只能for each value,不能同时获取i和v

  • 相关阅读:
    [NOI2016]循环之美(杜教筛)
    [CF600E]Dsu on tree
    [POI2015]Myjnie
    [POI2015]Odwiedziny
    [POI2015]Logistyka
    [POI2015]Wilcze doły
    [POI2017]Sabotaż
    [BZOJ3928/4048]Outer space invaders
    [BZOJ5109]大吉大利,晚上吃鸡!
    [AGC016E]Poor Turkeys
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/15815562.html
Copyright © 2020-2023  润新知