数组



【GO 编程语言】数组-LMLPHP


一、数组是什么

Go 语言提供了数组类型的 数据结构。

  • 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型。例如整型、字符串或者自定义类型。

  • 数组元索可以通过索引(位置) 来读取(或者修改) ,索引从 0 开始,第一个元索索引为0,第二个索引为1,以此类推。数组的下标取值范国是从0开始,到长度减一。

数组一旦定义后,大小不能改变.
【GO 编程语言】数组-LMLPHP
数组声明

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

var 变量名 [大小] 变量类型
package main

import "fmt"

func main() {
	// 定义一个数组  var 变量名 [大小]变量类型
	var nums [4]int

	// 数组的下标是从 0 开始的
	nums[0] = 1
	nums[1] = 2
	nums[2] = 3
	nums[3] = 4
	fmt.Printf("%T\n", nums)
	// 通过下标来获取数组元素
	fmt.Println(nums[3])
	fmt.Println(nums[2])
	fmt.Println(nums[1])
	fmt.Println(nums[0])

	// 数组常用的方法
	// 因为数组是固定长度的,所以长度和容量是相同的
	length := len(nums)
	capacity := cap(nums)
	fmt.Println(length)   // 输出长度
	fmt.Println(capacity) // 输出容量

	// 修改数组的值
	fmt.Println(nums)
	nums[0] = 6
	fmt.Println(nums)

}

【GO 编程语言】数组-LMLPHP

数组的定义:

  • 数组是相同类型数据的有序集合
  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排序组合而成
  • 其中,每一个数据称做一个数组元素,每个数组元素可以通过一个下标来访问它们

数组的基本特点:

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型

二、初始化数组

初始化数组中 {} 的元素不能大于 [] 中的数字。

package main

import "fmt"

func main() {
	// 常规的初始化
	var arr1 = [4]int{1, 2, 3, 4}

	fmt.Println(arr1)
	fmt.Println(arr1[0])

	// 快速定义数组
	arr2 := [4]int{5, 6, 7, 8}
	fmt.Println(arr2)
	fmt.Println(arr2[0])

	// 如果不确定数组长度
	// 可以使用 ...  代替数组的长度
	// 编译器会根据元素个数自行推断数组的长度
	arr3 := [...]string{"hello", "world", "!"}
	fmt.Println(arr3)
	fmt.Println(len(arr3))
	fmt.Println(cap(arr3))
	
	// 如果设置了数组的长度,我们可以通过指定下标来初始化元素
	arr4 := [4]int{1: 9, 3: 10}
	fmt.Println(arr4)

}

输出
【GO 编程语言】数组-LMLPHP

三、数组的遍历

package main

import "fmt"

/*
数组的遍历:
依次访问数组中的元素
方法1, arr[0],arr[1],arr[2]....
方法2:通过循环,配合下标
for i:=0;i<len(arr);i++{
	arr[i]
}
方法3: range
range:词义“范围”
不需要操作数组的下标,到达数组的末尾,自动结束 for range循环
每次从数组中获取下标和对应位置的数值
*/

func main() {
	// 常规的初始化
	var arr1 = [4]int{1, 2, 3, 4}

	fmt.Println(arr1[0])
	fmt.Println(arr1[1])
	fmt.Println(arr1[2])
	fmt.Println(arr1[3])

	fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
	//采用for循环遍历输出
	for i := 0; i < 4; i++ {
		fmt.Println(arr1[i])
	}

	// 快捷键生成 arr1.for
	// for range 可以得到 下标(index) 和 下标对应的值(value)
	for index, value := range arr1 {
		fmt.Println(index, value)
	}
}

输出
【GO 编程语言】数组-LMLPHP

四、数组类型

package main

import "fmt"

func main() {
	num := 8
	var arr1 = [4]int{1, 2, 3, 4}
	var arr2 = [4]string{"hello", "wrold", "!"}

	fmt.Printf("%T", arr1)
	fmt.Println()
	fmt.Printf("%T", arr2)

	// 值类型:拷贝 arr
	num2 := num
	fmt.Println(num, num2)
	num2 = 10
	fmt.Println(num, num2)
	fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>")

	arr3 := arr1
	fmt.Println(arr1)
	fmt.Println(arr3)
	fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>")
	// 改变arr3并没有影响到arr1,数组也是值传递
	arr3[0] = 66
	fmt.Println(arr1)
	fmt.Println(arr3)

}

输出
【GO 编程语言】数组-LMLPHP

五、数组排序

05-11 22:38