Skip to content

数组

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

一维数组

  • 格式:var arrayName [size]type
go
// 方式1 声明
var arr1 [3]int
arr1[0] = 1
arr1[1] = 2
arr1[2] = 3

// 方式2 声明+初始化
var arr2 = [3]int{1, 2, 3}

多维数组

  • 格式:var arrayName [size1][size2]...[sizeN]type
go
// 创建二维数组
sites := [2][2]string{}
// 向二维数组添加元素
sites[0][0] = "Google"
sites[0][1] = "Runoob"
sites[1][0] = "Taobao"
sites[1][1] = "Weibo"
// 显示结果
fmt.Println(sites)

输出结果

[[Google Runoob] [Taobao Weibo]]

元素操作

创建数组

go
arr := [5]string{"I'm"}

追加元素

go
arr = append(arr, "like")
arr = append(arr, "cat")
// 追加多个元素
arr = append(arr, "and", "dog")
fmt.Println(arr)

输出结果

[I'm like cat and dog]

编辑元素

go
arr[4] = "monkey"
fmt.Println(arr)

输出结果

[I'm like cat and monkey]

截取元素

go
fmt.Println("取第一个元素", arr[0])

// 可以简写为arr[:2],表示从索引0开始取,直到索引2(不包含索引2)
fmt.Println("取下标0-1的元素", arr[0:2])

// 表示从索引3开始取,直到数组末尾
fmt.Println("取下标3之后的元素", arr[3:])

输出结果

取第一个元素 I'm

取下标0-1的元素 [I'm like]

取下标3之后的元素 [and monkey]

删除元素

go
// 删除索引为1的元素
// 1. 先取索引0的元素作为一个新的数组,
// 2. 再取索引2之后的元素索引元素追加到新的数组中,达到删除效果
arr = append(arr[:1], arr[2:]...)
fmt.Println(arr)

输出结果

[I'm cat and monkey]

查询元素

  • go 没有直接方法查询数组是否存在某个元素
  • 可以通过遍历数组, 比较每个元素是否等于目标元素, 来判断数组是否存在某个元素.
go
// 定义一个数组变量
arr := [5]string{"I'm", "like", "cat", "and", "monkey"}
str1 := "cat"

for _,value := range arr{
	if value == str1{
		fmt.Println("数组存在元素", str1)
	}
}

数组处理集成

go
package types

// 定义 可以比较的泛型 结构体
type Array[T comparable] struct {
	data []T
}

// 初始化 Array
func NewArray[T comparable](s []T) *Array[T] {
	return &Array[T]{data: s}
}

// 获取切片长度
func (s *Array[T]) Len() int {
	return len(s.data)
}

// 转为 map
func (s *Array[T]) toMap() map[T]struct{} {
	m := make(map[T]struct{}, len(s.data))
	for _, v := range s.data {
		m[v] = struct{}{}
	}
	return m
}

// 判断是否包含某个元素
func (s *Array[T]) Contains(i T) bool {
	m := s.toMap()
	if _, ok := m[i]; ok {
		return true
	}
	return false
}

// 查找某个元素的索引,未找到索引为-1
func (s *Array[T]) FindIndex(i T) int {
	for index, v := range s.data {
		if v == i {
			return index
		}
	}
	return -1
}

任意数组

go
// 定义 任意类型数组,且不限长度
var arr1 [][]interface{} = [][]interface{}{
	{1, 2, 3},
	{"a", "b", "c"},
	{1, "a", 1.1},
}