【入门】Go语言数组详解

一、Go语言数组简介

1.1 什么是数组?

  • 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。

  • 因为数组的长度是固定的,所以在Go语言中很少直接使用数组。

  • 数组可以存放多个同一类型数据。数组也是一种数据类型,在Go中,数组是值类型。

  • 数组的每个元素都可以通过索引来访问,索引起始0开始到数组长度减1的位置,内置函数len()可以返回数组中元素的个数。

1.2 数组声明语法

var 数组变量名 [元素数量]Type
  • 数组变量名:数组声明及使用时的变量名
  • 元素数量:数组的元素数量
  • Type:可以是任意基本类型,也可以是数组本省,类型为数组本身时,可以实现多维数组。

举个例子:创建int类型的class数组,其中元素数量为5

	var class [5]int

二、数组的基本操作

2.1 数组的定义及赋值

package main

import (
	"fmt"
)

func main() {
	var class [5]int // 定义数组
	for i := 0; i < len(class); i++ {
		class[i] = i + 100 // 数组赋值
	}
	fmt.Println(class)
}

代码输出内容:

[100 101 102 103 104]

2.2 数组的初始化

数组初始化是指在声明数组时赋值。

2.2.1 指定长度初始化

指定长度和初始化值,初始化数组中 {} 中的元素个数不能大于 [] 中的数字:

注意: 初始化时是带有 = 号的。

func main() {
	var class = [4]string{"zhangsan", "lisi", "wangwu", "maliu"}
	fmt.Printf("%v", class)
}

2.2.2 不指定长度初始化

当我们不指定长度的时候,也就是[]中不写入内容,GO语言默认会根据元素的个数来设置数组的大小。

package main

import (
	"fmt"
)

func main() {
	var class = [...]string{"zhangsan", "lisi", "wangwu", "maliu"}
	fmt.Printf("%v", len(class))
}

或者使用 ...如下:

package main

import (
	"fmt"
)

func main() {
	var class = [...]string{1: "lisi", 3: "maliu"}
	fmt.Println(len(class))
}

代码输出内容:

4

2.2.3 根据索引初始化指定元素

只初始化索引是 1和3 的元素

package main

import (
	"fmt"
)

func main() {
	var class = []string{1: "lisi", 3: "maliu"}
	fmt.Println(class)
}

三、数组的遍历

3.1 传统for循环遍历

package main

import (
	"fmt"
)

func main() {
	var arr = [...]float64{1.1, 1.2, 1.3, 1.4, 1.5, 1.6}
	for i := 0; i < len(arr); i++ {
		fmt.Println(arr[i])
	}
}

3.2 for range循环遍历

package main

import (
	"fmt"
)

func main() {
	var arr = [...]float64{1.1, 1.2, 1.3, 1.4, 1.5, 1.6}
	for i, v := range arr {
		fmt.Printf("index=%d\tvalue=%v\n", i, v)
	}
}

代码输出内容:

index=0	value=1.1
index=1	value=1.2
index=2	value=1.3
index=3	value=1.4
index=4	value=1.5
index=5	value=1.6

四、数组综合练习

4.1 案例一:比较两台数组元素是否一致

package main

import "fmt"

func main() {
	var arr1 = [5]int{1, 2, 3, 4, 5}
	var arr2 = [5]int{1, 2, 3, 4, 5}
	b := Compare(arr1, arr2)
	if b {
		fmt.Println("数组一致!")
	} else {
		fmt.Println("数组不致!")
	}
}

func Compare(n1 [5]int, n2 [5]int) bool {
	var b bool = true
	if len(n1) == len(n2) {
		for i := 0; i < len(n1); i++ {
			if n1[i] == n2[i] {
				continue
			} else {
				b = false
				break
			}
		}
	} else {
		b = false
	}
	return b
}

4.2 案例二:从数组中查出最大整数,最小整数并且算出总和 和平均值

package main

import "fmt"

func main() {
	var arr = [...]int{50, 100, 200, 300, 400, 500, 600}
	var maxNum int
	var minNum int = arr[0]
	var sumNum int

	for i := 0; i < len(arr); i++ {
		sumNum += arr[i]
		if arr[i] > maxNum {
			maxNum = arr[i]
		} else if arr[i] < minNum {
			minNum = arr[i]
		}

	}
	fmt.Printf("最大值:%d\t最小值:%d\t总和:%d\t平均:%d", maxNum, minNum, sumNum, sumNum/len(arr))
}

函数方式写法:

package main

import "fmt"

func cal(arr []int) (int, int, int) {
	var maxNum int
	var minNum int = arr[0]
	var sumNum int

	for i := 0; i < len(arr); i++ {
		sumNum += arr[i]
		if arr[i] > maxNum {
			maxNum = arr[i]
		} else if arr[i] < minNum {
			minNum = arr[i]
		}
	}
	return maxNum, minNum, sumNum
}
func main() {
	var arr = [...]int{50, 100, 200, 300, 400, 500, 600}
	maxNum, minNum, sumNum := cal(arr[:])
	fmt.Printf("最大值:%d\t最小值:%d\t总和:%d\t平均:%d", maxNum, minNum, sumNum, sumNum/len(arr))
}

代码输出内容:

最大值:600	最小值:50	总和:2150	平均:307

4.3 案例三:输出数组中最长的字符串

package main

import (
	"fmt"
)

func main() {
	var names = [...]string{"张三三", "李四四五", "王五", "马六", "七七"}
	strMaxLen := names[0]

	for i := 0; i < len(names); i++ {
		if len(names[i]) > len(strMaxLen) {
			strMaxLen = names[i]
		}
	}
	fmt.Println(strMaxLen)
}

五、二维数组

前面定义的数组只有一个下标,称之为一维数组,如果有两个下标,称之为二维数组。

5.1 二维数组声明语法

var 数组名 [x][y]类型
  • x: 第一个下标代表行
  • y: 第二个下标代表列

举个例子:

package main

import "fmt"

func main() {
	var arr [2][3]int
	arr[1][2] = 123
	fmt.Println("二行三列内容:", arr[1][2])
}

简单画个图一看就懂:

5.2 二维数组初始化

语法:

var 数组名称 = [x][y]类型{{x数据}, {y数据}}
}

案例:

package main

import "fmt"

func main() {
	// 初始化[0][0],[1][0],[1][1] 输出:[[200 0 0] [100 300 0]]
	// var arr = [2][3]int{{200}, {100, 300}}

	// 初始化[1][0],[1][1] 输出: [[0 0 0] [200 300 0]]
	// var arr = [2][3]int{1: {200, 300}}

	// 初始化[1][2]: 输出:[[0 0 0] [0 0 200]]
	var arr = [2][3]int{1: {2: 200}}
	fmt.Println(arr)
}

5.3 二维数组遍历

取行和列的长度:

package main

import "fmt"

func main() {
	var arr = [2][3]int{{1, 2, 3}, {4, 5, 6}}
	fmt.Println("行:", len(arr))
	fmt.Println("列:", len(arr[0]))
}

代码输出内容:

行: 2
列: 3

案例:遍历二维数组

package main

import "fmt"

func main() {
	fmt.Println()
	var arr = [2][3]int{{1, 2, 3}, {4, 5, 6}}

	fmt.Println("============常规for循环==============")
	for i := 0; i < len(arr); i++ {
		for j := 0; j < len(arr[i]); j++ {
			fmt.Printf("%v\t", arr[i][j])
		}
		fmt.Println()
	}
	fmt.Println("============for range循环==============")
	for i, v := range arr {
		for j, v2 := range v {
			fmt.Printf("arr[%v][%v]=%v\t", i, j, v2)
		}
		fmt.Println()
	}
}

代码输出内容:

============常规for循环==============
1	2	3	
4	5	6	
============for range循环==============
arr[0][0]=1	arr[0][1]=2	arr[0][2]=3	
arr[1][0]=4	arr[1][1]=5	arr[1][2]=6	
posted @ 2023-03-28 16:20  乱七八糟博客备份  阅读(226)  评论(0编辑  收藏  举报