# 我的Go+语言初体验——GO+实现数据结构之【数组 切片 Map】(1)

## 数组基本操作

### 声明

#### 一维数组

var linearArray [1]int

linearArray := [...]int{1,2,3}

Golang 中数组的初始值如果不声明，则默认是全部有初值的

bool 值类型的数组，如果不做赋值操作，则初始值全为 false

package main
func main() {
var linearArray [1]int
print linearArray[0]
}

package main
func main() {
var linearArray [1]bool
print linearArray[0]
}

#### 二维数组

var twoDimensionalArray [1][2]int

### 遍历

linearArray := [...]int{1,2,3}
for x <- linearArray, x > 1 {
print x
}

linearArray := [...]int{5, 4, 3, 2, 1, 0}
for index, value := range linearArray {
println "索引：",index,", 值： ",value
}

linearArray := [...]int{5, 4, 3, 2, 1, 0}
for i := 0; i < len(linearArray); i++ {
println linearArray[i]
}

## 切片基本操作

• make([ ]Type, length, capacity)

• make([ ]Type, length)

• [ ]Type{}
• [ ]Type{value1, …, valueN}

slice := []int{}
for i := 0; i < 5; i++ {
slice = append(slice, i)
}
print slice

slice := []int{}
for i := 0; i < 5; i++ {
slice = append(slice, i)
}
print slice[1:3]

提取slice中第一个开始到第三个数值(不包括第三个)

[n:m] 的意思就是取区间 [n,m)

func ExtractInterval(sliceObject []int, start int, end int) []int {
new_sliceObject := []int{}
for i := start - 1; i < end-1; i++ {
new_sliceObject = append(new_sliceObject, sliceObject[i])
}
return new_sliceObject
}
slice := []int{}
for i := 0; i < 5; i++ {
slice = append(slice, i)
}
print ExtractInterval(slice, 1, 3)

### 更多知识点

Go+ 切片的扩容规则

Go+ 切片其底层数组永远不会改变

## Map literal（集合）

MapLiteral := {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}

### 遍历

MapLiteral := {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
for k, v := range MapLiteral {
println "k:[", k, "].v:[", v, "]\n"
}

### 删除

delete() 方法可以实现

delete(集合, key)

MapLiteral := map[string]int{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
delete(MapLiteral, "a")
for k, v := range MapLiteral {
println "k:[", k, "].v:[", v, "]\n"
}

### 修改与增加

MapLiteral := map[string]int{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
MapLiteral["a"] = 0
MapLiteral["f"] = 6
for k, v := range MapLiteral {
println "k:[", k, "].v:[", v, "]\n"
}

## 练习

Array := [...]int{123, 343, 143, 524, 462, 5672, 3467}
// 冒泡排序
for i := 0; i < len(Array); i++ {
for j := 1; j < len(Array)-i; j++ {
if Array[j] < Array[j-1] {
Array[j], Array[j-1] = Array[j-1], Array[j]
}
}
}
print Array

|
2月前
|
Go
go语言数组与切片
go语言数组与切片
29 0
|
3天前
|

18 7
|
4天前
|
Go
Go 1.21的新特性: 切片和映射
Go 1.21的新特性: 切片和映射
26 6
|
5天前
|

go 切片长度与容量的区别
go 切片长度与容量的区别
11 4
|
13天前
|

go切片和指针切片
go切片和指针切片
12 2
|
4天前
|

14 0
|
1月前
|
JavaScript API
js【最佳实践】遍历数组的八种方法（含数组遍历 API 的对比）for,forEach,for of,map,filter,reduce,every,some
js【最佳实践】遍历数组的八种方法（含数组遍历 API 的对比）for,forEach,for of,map,filter,reduce,every,some
35 1
|
2月前
|
Go
go切片和map比较
go切片和map比较
17 0
|
3天前
|
Go
Go 语言为什么不支持并发读写 map？
Go 语言为什么不支持并发读写 map？
17 4
|
3天前
|
XML JSON Go

25 7