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

  • 相关阅读:
    (转)【web前端培训之前后端的配合(中)】继续昨日的故事
    ural(Timus) 1136. Parliament
    scau Josephus Problem
    ACMICPC Live Archive 6204 Poker End Games
    uva 10391 Compound Words
    ACMICPC Live Archive 3222 Joke with Turtles
    uva 10132 File Fragmentation
    uva 270 Lining Up
    【转】各种字符串哈希函数比较
    uva 10905 Children's Game
  • 原文地址:https://www.cnblogs.com/sss4/p/12550517.html
Copyright © 2011-2022 走看看