zoukankan      html  css  js  c++  java
  • Golang数据类型 数组(arry)

    前言

    前面学习了Go数据类型中的数字、字符串,下面看看Go中是否有Python中的list、dict等复合数据类型?

    需要注意的是在Go中数组是值类型,而切片是引用类型

    package main
    
    import "fmt"
    
    func main() {
    	//声明1个字符串变量
    	var name string
    	fmt.Println(name)
    	//声明1个数组变量
    	var a1 [3]int
    	fmt.Println(a1)
    	//声明1个切片类型的变量
    	var s1 []int
    	fmt.Println(s1 == nil)
    	//声明二维数组
    	var a3 [3][3]int
    	//对二维数组进行初始化
    	a3 = [3][3]int{
    		[3]int{1, 2, 3},
    		[3]int{4, 5, 6},
    		[3]int{7, 8, 8},
    	}
    	fmt.Println(a3)
    	//
    	a4 := [3]int{1, 2, 3}
    	a5 := modifyArry(a4)
    	fmt.Println(a4)
    	fmt.Println(a5)
    	s2 := []string{"河北", "保定", "唐县"}
    	s3 := modifySlice(s2)
    	fmt.Println(s2)
    	fmt.Println(s3)
    
    }
    
    //数组是值类型:修改数组时,会复制 1个新的数组让我们修改
    func modifyArry(a1 [3]int) (ret [3]int) {
    	a1[0] = 100
    	return a1
    }
    
    //切片是引用类型:修改切片时,不会复制1个新的切片让我们修改(修改原来的)
    func modifySlice(s2 []string) (ret2 []string) {
    	s2[0] = "河北省"
    	return s2
    }
    

      

    数组

    数组就是存放同1种数据基本数据类型(数值,字符、字符串、布尔值)元素的容器。

    Go中的数组有一下特点:

    在声明arry变量时就要声明arry的长度、容器内存放元素的数据类型;

    数组的长度是数据类型的1部分,所以2个长度不同arrr,即使他们都属于数组,但2者的数据类型完全不一致,所以2者无法相互比较和赋值。

    数组如果没有初始化里面的元素默认为0值(bool=false,int or float=0, string=空字符串)

    数组的声明和初始化

    package main
    
    import "fmt"
    
    func main() {
    	//数组:存放同1中基础数据类型的容器
    	//声明1个长度为3的数组,里面存放bool数据类型
    	var arry1 [3]bool
    	var arry2 [4]bool
    	var arry3 [3]bool
    	fmt.Printf("arry1:%T arry2:%T arry3:%T
    ", arry1, arry2, arry3)
    	fmt.Println(arry1 == arry3)
    	//初始化方式1:
    	arry1 = [3]bool{true, true, true}
    	fmt.Println(arry1) //[true true true]
    	//初始化方式2:[...]自动推算数组的长度
    	arry4 := [...]int{1, 2, 3, 4}
    	fmt.Println(arry4)
    	//初始化方式3:利用默认值
    	arry5 := [5]int{12, 13}
    	fmt.Println(arry5) //[12 13 0 0 0]
    	//初始化方式4:根据索引指定arry中的元素
    	arry6 := [5]int{0: 1, 4: 6}
    	fmt.Println(arry6)//[1 0 0 0 6]
    
    }
    

      

    遍历数组

    //遍历数组
    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	//根据索引访问元素
    	var cities = [...]string{"北京", "上海", "深圳"}
    	for i := 0; i < len(cities); i++ {
    		fmt.Printf("%s
    ", cities[i])
    	}
    
    	//遍历数组
    	for i, v := range cities {
    		fmt.Println(i, v)
    	}
    
    }
    

      

    多维数组

    多维数组就是数组里面嵌套数组

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	//定义多维数组
    	a1 := [3][2]int{{1, 2}, {1, 3}, {1, 4}}
    	fmt.Println(a1) //[[1 2] [1 3] [1 4]]
    	//遍历多维数组
    	for _, v := range a1 {
    		for _, v1 := range v {
    			fmt.Println(v1)
    		}
    	}
    
    }
    

    Go中多维数组是数值类型不是引用类型

     值类型:就是重新开辟新的内存,与引用类型相反

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	//arry数值类型辩证
    	a1 := [...]string{"河北", "河南", "山东"}
    	a2 := a1
    	a1[len(a1)-1] = "山西"
    	fmt.Println(a1) //[河北 河南 山西]
    	fmt.Println(a2) //[河北 河南 山东]
    
    }
    

      

     练习题

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	//1.求数组[1, 3, 5, 7, 8]所有元素的和
    	arr1 := [...]int{1, 3, 5, 7, 8}
    	var sum int
    	for _, v := range arr1 {
    		sum += v
    	}
    	fmt.Println(sum)
    	/*找出数组中和为指定值的两个元素的下标,比如从数组[1, 3, 5, 7, 8]中找出和为8的两个元素的下标分别为(0,3)和(1,2)*/
    	for i := 0; i < len(arr1); i++ {
    		for j := i + 1; j < len(arr1); j++ {
    			if arr1[i]+arr1[j] == 8 {
    				fmt.Printf("%d %d
    ", i, j)
    			}
    		}
    	}
    
    }
    

    see also

  • 相关阅读:
    JQuery常用动画实现函数
    DOM对象和JQuery对象进行转换
    JQuery中的mouseover和mouseenter的区别
    JQuery使用和选择器
    LintCode 11 二叉查找树的搜索区间
    Java IO整理
    JS基础知识——缓动动画
    JS——无缝滚动
    Java GC系列(1):Java垃圾回收简介
    深入理解Java之线程池
  • 原文地址:https://www.cnblogs.com/sss4/p/12550517.html
Copyright © 2011-2022 走看看