当前位置: 首页 > news >正文

【Go】数组

知识点关键概念
数组定义var arr [5]int
数组初始化arr := [5]int{1, 2, 3, 4, 5}
省略长度arr := [...]int{1, 2, 3}
获取长度len(arr)
数组截取subArr := arr[1:3](返回切片)
二维数组var arr [3][4]int
遍历数组for i := 0; i < len(arr); i++for index, value := range arr
查找交集嵌套 for 循环
修改元素arr[index] = newValue

1. 数组的定义和初始化

代码示例

package main

import "fmt"

func main() {
	// 定义一个长度为 5 的整型数组,默认初始化为 0
	var arr1 [5]int
	fmt.Println(arr1) // [0 0 0 0 0]

	// 使用字面量初始化数组
	var arr2 = [5]int{1, 2, 3, 4, 5}
	fmt.Println(arr2) // [1 2 3 4 5]

	// 只初始化特定索引位置的元素,未赋值的默认 0
	arr3 := [5]int{1: 200}
	fmt.Println(arr3) // [0 200 0 0 0]

	// 使用 `...` 让编译器推断数组长度
	arr4 := [...]int{1, 2, 3, 4, 5, 6, 7}
	fmt.Println(arr4) // [1 2 3 4 5 6 7]
}

学习笔记

  • 数组是定长的,长度在声明时就确定,不能动态改变。
  • 索引默认从 0 开始,未初始化的元素会使用默认值(整数为 0)。
  • 数组可以部分初始化,未指定值的索引会使用默认值。
  • [...] 让编译器自动推断数组长度,适用于长度未知但初始化值确定的情况。

2. 获取数组长度

代码示例

package main

import "fmt"

func main() {
	arr := [...]int{1, 2, 3, 4, 5, 6, 7}
	fmt.Println("数组长度:", len(arr)) // 7
}

学习笔记

  • 使用 len() 获取数组长度len(arr) 返回数组元素个数。
  • 数组长度是固定的,不能动态调整。

3. 数组的截取(切片转换)

代码示例

package main

import "fmt"

func main() {
	arr := [...]int{1, 2, 3, 4, 5, 6, 7}
	subArr := arr[2:4] // 截取索引 [2, 4) 的部分
	fmt.Println(subArr) // [3 4]
	fmt.Printf("数组类型: %T\n", arr)    // [7]int
	fmt.Printf("切片类型: %T\n", subArr) // []int
}

学习笔记

  • 数组的截取会变成切片,即 arr[start:end] 会返回一个 []int 类型的切片,而非数组。
  • 切片是对原数组的引用,修改切片的元素会影响原数组。

4. 二维数组

代码示例

package main

import "fmt"

func main() {
	// 定义一个 3x4 的二维数组
	arr := [3][4]int{
		{1, 2, 3},
		{4, 5, 6},
		{7}, // 逗号不能省略,否则语法错误
	}
	fmt.Println(arr)
}

学习笔记

  • 二维数组可以部分初始化,未指定的元素会使用默认值(整数为 0)。
  • 数组声明时必须指定长度,不能动态扩展。
  • 可以通过 arr[row][col] 访问二维数组的元素

5. 遍历数组

代码示例

package main

import "fmt"

func main() {
	arr := [...]int{10, 20, 30, 40, 50}

	// 使用 for 循环遍历
	for i := 0; i < len(arr); i++ {
		fmt.Println("索引:", i, "值:", arr[i])
	}

	// 使用 for-range 遍历
	for index, value := range arr {
		fmt.Println("索引:", index, "值:", value)
	}
}

学习笔记

  • 可以使用 for 循环遍历数组,通过 len(arr) 获取数组长度。
  • for-range 更简洁index, value := range arr 直接获取索引和值。

6. 查找两个数组的交集

代码示例

package main

import (
	"fmt"
	"strconv"
)

func main() {
	arr1 := [...]int{1, 2, 5, 4, 6, 3, 1, 10}
	arr2 := [...]int{6, 5, 8, 7, 4, 3, 6, 52}
	result := ""

	for _, v1 := range arr1 {
		for _, v2 := range arr2 {
			if v1 == v2 {
				// 转换成字符串拼接
				result += strconv.Itoa(v1) + " "
				break
			}
		}
	}
	fmt.Println("交集元素:", result)
}

学习笔记

  • 双层 for 循环可以比较两个数组的所有元素
  • 使用 break 可以减少不必要的比较,提高效率。
  • strconv.Itoa() 用于将整数转换为字符串,便于拼接结果。

7. 修改数组元素

代码示例

package main

import "fmt"

func main() {
	arr := [...]int{10, 20, 30, 40, 50}
	arr[2] = 100 // 修改索引 2 处的元素
	fmt.Println(arr) // [10 20 100 40 50]
}

学习笔记

  • 数组的元素可以通过索引访问和修改arr[index] = value
  • 数组的大小不可变,但元素的值可以改变。

相关文章:

  • 中间件监控:保障应用稳定性和响应速度
  • Servlet中request、response、session 用法
  • C++学习笔记(二十五)——vector
  • OpenCV第2课 OpenCV的组成结构与图片/视频的加载及展示
  • MapReduce1中资源预先划分为固定数量的map slot和reduce slot,具体是怎么划分的?
  • 深度强化学习(Deep Reinforcement Learning, DRL)
  • java 批量下载doc\excle\pdf
  • leetcode-12.整数转罗马数字
  • git 标签学习笔记
  • Android Monkey测试完全指南:从入门到实战
  • allure结合pytest生成测试报告
  • chrome插件开发之API解析-chrome.tabs.query
  • 【智能搜索引擎技术】第四章搜索引擎索引构建(水课复习自用)
  • Qt在ARM中,如何使用drmModeObjectSetProperty 设置 Plane 的 zpos 值
  • 识别并脱敏上传到deepseek/chatgpt的Word文件中的敏感信息
  • 视频知识库初步设想
  • 游戏摇杆开发:利用 Windows API 实现摇杆输入捕获
  • 【模拟面试】计算机考研复试集训(第十二天)
  • 开源在线客服系统源码-前端源码加载逻辑
  • VUE2导出el-table数据为excel并且按字段分多个sheet
  • 街区党支部书记们亮出治理实招,解锁“善治街区二十法”
  • 五一“大车流”来了,今日午后G40沪陕高速开始迎来出沪高峰
  • 中国人保一季度业绩“分化”:财险净利增超92%,寿险增收不增利
  • 辽宁辽阳市白塔区一饭店发生火灾,事故已造成22人遇难3人受伤
  • 在岸、离岸人民币对美元汇率双双升破7.26关口
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议