生活中的数组
数组是计算机科学中的一种数据结构,但其实在日常生活中,我们经常会遇到类似数组的概念,用来组织和管理各种信息。以下是一些生活中常见的数组应用:
-
购物清单: 想象一下你去超市购物,你可能会列一个购物清单,上面按顺序罗列了你需要购买的物品,就像数组中的元素一样。
-
图书馆书架: 图书馆通常会将书籍按照分类和编号的方式放置在书架上,形成一个有序的集合,类似于数组的结构。
-
座位表: 在婚礼、宴会或会议上,座位表往往以数组或类似数组的方式组织,方便管理每位嘉宾的座位位置。
-
火车、飞机座位排布: 车厢和飞机座位通常按照行和列的方式排布,就像一个二维数组,方便人们找到自己的座位。
-
学生成绩册: 学校的成绩册通常以学生的学号或姓名的顺序排列,形成一个类似数组的结构,方便查阅学生成绩。
-
体育比赛成绩: 体育比赛中的各种数据,比如运动员的成绩、名次等,也可以组织成数组,以便更方便地进行分析和管理。
-
音乐播放列表: 在音乐播放器中,你可以创建一个播放列表,其中包含按照你的喜好或心情排列的歌曲,就像一个音乐数组。
-
电影院座位: 在购票时,电影院的座位往往以数组的形式展示,你可以选择一个具体的位置进行购票。
这些例子表明,虽然我们在生活中并没有直接使用计算机科学中的术语,但我们经常使用类似数组的结构来组织和管理信息,使得事物更加有序和易于管理。
Golang中的数组
数组是一种数据结构,用于存储相同类型的元素集合。这些元素在内存中是连续存储的,并通过索引或下标来访问。数组是一种简单而强大的数据结构,常用于在程序中存储和操作一系列相关的数据。
以下是关于数组的一些核心概念:
-
元素(Element): 数组中的每个数据项称为元素。元素可以是任何数据类型,如整数、浮点数、字符等。
-
索引(Index): 每个元素在数组中都有一个唯一的索引或下标,用于标识元素在数组中的位置。索引通常从0开始递增,例如,第一个元素的索引是0,第二个是1,以此类推。
-
长度(Length): 数组的长度是指数组中包含的元素数量。长度确定了数组的大小,一旦数组被创建,其长度通常是固定的。
-
类型(Type): 数组是一个固定类型的数据结构,即所有元素都必须是相同类型。例如,整数数组只能包含整数元素。
-
连续存储(Contiguous Storage): 数组中的元素在内存中是连续存储的,这意味着它们的地址是相邻的。这种特性使得通过索引快速访问数组元素成为可能。
-
随机访问(Random Access): 由于元素在内存中的连续存储,数组支持直接根据索引随机访问元素。这使得数组在查找、插入和删除元素时具有较高的效率。
-
固定大小(Fixed Size): 数组一旦被创建,其大小通常是固定的,不可动态改变。如果需要更灵活的大小,可能需要使用其他数据结构,如切片。
下面是一个简单的示例,演示了一个整数数组的创建和基本操作:
package main
import "fmt"
func main() {
// 创建一个包含5个整数的数组
var numbers [5]int
// 给数组赋值
numbers[0] = 1
numbers[1] = 2
numbers[2] = 3
numbers[3] = 4
numbers[4] = 5
// 访问数组元素并打印
fmt.Println("First element:", numbers[0])
fmt.Println("Second element:", numbers[1])
// 数组长度
fmt.Println("Array length:", len(numbers))
}
在这个例子中,我们创建了一个包含5个整数的数组,然后为数组赋值,并通过索引访问和打印数组元素。
实践
这段Go代码演示了数组的基本操作和多维数组的创建与使用。下面是对代码的解释:
-
创建数组
a:var a [5]int fmt.Println("emp:", a)创建一个长度为5的整数数组
a,并初始化为该类型的零值(整数类型的零值为0)。打印结果为emp: [0 0 0 0 0]。 -
设置和获取数组元素:
a[4] = 100 fmt.Println("set:", a) fmt.Println("get:", a[4])设置数组
a的第5个元素为100,并打印整个数组和获取的元素值。打印结果为set: [0 0 0 0 100]和get: 100。 -
获取数组长度:
fmt.Println("len:", len(a))打印数组
a的长度,即5。 -
创建并初始化数组
b:b := [5]int{1, 2, 3, 4, 5} fmt.Println("dcl:", b)使用短声明语法创建并初始化数组
b,并打印该数组。打印结果为dcl: [1 2 3 4 5]。 -
创建二维数组
twoD:var twoD [2][3]int for i := 0; i < 2; i++ { for j := 0; j < 3; j++ { twoD[i][j] = i + j } } fmt.Println("2d:", twoD)创建一个2行3列的二维整数数组
twoD,并使用嵌套循环为每个元素赋值。打印结果为2d: [[0 1 2] [1 2 3]],表示二维数组的内容。
下面的代码可以敲一敲,感受一下:
package main
import "fmt"
func main() {
var a [5]int
fmt.Println("emp:", a)
a[4] = 100
fmt.Println("set:", a)
fmt.Println("get:", a[4])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println("dcl:", b)
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d:", twoD)
}