目录
一维数组
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。
数组元素可以通过索引(位置)来读取(或者修改),索引从О开始,第一个元素索引为0,第二个索引为1,以此类推。
1、声明数组
声明需要指定元素类型及元素个数
var variable_name [size] variable_type
例:
var balance [10] float32
2、初始化数组
例:
定长数组
var balance = [5]float32{1000.0,2.0,3.4,7.0,50.0}
balance :=[5]float32{1000.0,2.0,3.4,7.0,50.0}
不定长数组
var balance =[...]float32{1000.0,2.0,3.4,7.0,50.0}
balance :=[...]float32{1000.0,2.0,3.4,7.0,50.0}
通过指定下标来初始化元素
balance :=[5]float32{1:2.0,3:7.0}
3、访问数组元素
数组元素通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:
var aaa float32 = balance[9]
示例
package main
import "fmt"
//初始化
var Arry = [5]int{1: 20, 4: 50}
func main() {
//循环遍历数组元素
//更改索引为2的值
Arry[2] = 20
for i := 0; i < len(Arry); i++ {
fmt.Println(Arry[i])
}
//数组元素提取
fmt.Println(Arry[0])
fmt.Println(Arry[len(Arry)-1])
//输出数组长度
fmt.Println("数组长度:", len(Arry))
}
示例----for range//键值循环
package main
import "fmt"
var student_grade = [10]int{}
//控制台输入10名学生的成绩,如果低于60分的,
//自动修正成绩为60,并且展现成绩清单
func main() {
for i := 0; i < len(student_grade); i++ {
fmt.Printf("请输入学生%d的成绩:", i+1)
fmt.Scan(&student_grade[i])
if student_grade[i] < 60 {
student_grade[i] = 60
}
}
for number, grade := range student_grade { //键值循环
fmt.Printf("学生%d的成绩为:%d\n", number+1, grade)
}
}
##
请输入学生1的成绩:12
请输入学生2的成绩:23
请输入学生3的成绩:34
请输入学生4的成绩:45
请输入学生5的成绩:56
请输入学生6的成绩:67
请输入学生7的成绩:78
请输入学生8的成绩:89
请输入学生9的成绩:98
请输入学生10的成绩:88
学生1的成绩为:60
学生2的成绩为:60
学生3的成绩为:60
学生4的成绩为:60
学生5的成绩为:60
学生6的成绩为:67
学生7的成绩为:78
学生8的成绩为:89
学生9的成绩为:98
学生10的成绩为:88
示例----找出和为8的两个元素的下标
package main
import "fmt"
//找出数组中和为指定值的两个元素的下标,
//比如从数组[1,3,5,7,8]中找出和为8的两个元素的下标
//分别为(0,3)和(1,2)
func main() {
var a = [...]int{1, 3, 5, 7, 8}
for i := 0; i < len(a); i++ {
for j := 0; j < len(a); j++ {
if a[i]+a[j] == 8 {
fmt.Println(i, j)
}
}
}
}
##
0 3
1 2
2 1
3 0
找最大值
法一
package main
import (
"fmt"
)
//用户随意输入5个整数,求输入的最大值
func main() {
var number []int
var num int
for i := 0; i < 5; i++ {
fmt.Printf("请输入第%d个数字:", i+1)
fmt.Scan(&num)
number = append(number, num) //追加数字到数组中
}
var tmp = number[0]
for j := 0; j < len(number); j++ {
if number[j] > tmp {
tmp = number[j]
}
}
fmt.Println(tmp)
}
-----------------------------------------------------------------------------------------
法二
func main() {
var (
tmp int
num int
numbers [5]int
)
for i := 0; i < 5; i++ {
fmt.Printf("请输入第%d个数字:", i+1)
fmt.Scan(&num)
numbers[i] = num
}
fmt.Println("数据输入完成")
tmp = numbers[0]
for j := 1; j < 5; j++ {
if numbers[j] > tmp {
tmp = numbers[j]
}
}
fmt.Println("最大值", tmp)
}
##
请输入第1个数字:56
请输入第2个数字:98
请输入第3个数字:44
请输入第4个数字:667
请输入第5个数字:34
667
冒泡排序
给定数组
package main
import "fmt"
var number = [5]int{34, 61, 22, 75, 42}
//冒泡排序
func main() {
for j := 0; j < len(number)-1; j++ { //外循环次数
for i := 0; i < len(number)-1-j; i++ {
if number[i] > number[i+1] {
number[i], number[i+1] = number[i+1], number[i]
}
}
}
fmt.Println("冒泡排序后的结果为:", number)
}
##
冒泡排序后的结果为: [22 34 42 61 75]
控制台输入
package main
import "fmt"
var number [5]int
//冒泡排序
func main() {
var num int
for k := 0; k < len(number); k++ {
fmt.Printf("请输入数字%d:", k+1)
fmt.Scan(&num)
number[k] = num
//也可以用append的形式追加数组,追加到末尾
//number = append(number, num)
}
for j := 0; j < len(number)-1; j++ { //外循环次数
for i := 0; i < len(number)-1-j; i++ {
if number[i] > number[i+1] {
number[i], number[i+1] = number[i+1], number[i]
}
}
}
fmt.Println("冒泡排序后的结果为:", number)
}
##
请输入第1个数:34
请输入第2个数:61
请输入第3个数:22
请输入第4个数:75
请输入第5个数:42
[22 34 42 61 75]
不定长数组添加元素
package main
import "fmt"
func main() {
var (
names []string
name string
)
for i := 0; i < 5; i++ {
fmt.Printf("请输入第%d个人的姓名:", i+1)
fmt.Scan(&name)
//数组元素的添加
names = append(names, name)
}
fmt.Println(names)
}
##
请输入第1个人的姓名:oo
请输入第2个人的姓名:ww
请输入第3个人的姓名:dd
请输入第4个人的姓名:ff
请输入第5个人的姓名:cc
[oo ww dd ff cc]
4、数组是值类型
值传递不影响结果
多维数组
1、多维数组声明
声明方式 var variable_name [size1][size2] ...[sizen] variable_type `三维的整型数组:` 例:var threedim[5][10][4]int
2、二维数组
二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:
var arrayName [ x ][ y ] variable_type
示例
package main
import "fmt"
//二维数组[[1,2,3],[4,5,6]]
func main() {
var a [][]int
row1 := [3]int{1, 2, 3}
row2 := [3]int{4, 5, 6}
a = append(a, row1[:])
a = append(a, row2[:])
fmt.Println("二维数组中的第1个元素:", a[0])
fmt.Println("二维数组中的第2个元素:", a[1])
fmt.Println(a)
//访问第一个元素
fmt.Println(a[0][0])
}
##
二维数组中的第1个元素: [1 2 3]
二维数组中的第2个元素: [4 5 6]
[[1 2 3] [4 5 6]]
1
3、初始化二维数组
a := [3][4]int{
{0, 1, 2, 3} , // 第一行索引为 0
{4, 5, 6, 7} , // 第二行索引为 1
{8, 9, 10, 11}, //第三行索引为 2
}
以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:
a := [3][4]int{
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11}}
示例
package main
import "fmt"
//二维数组[[1,2,3],[4,5,6]]
func main() {
a := [2][3]int{}
a[0][0] = 1
a[0][1] = 2
a[0][2] = 3
a[1][0] = 4
a[1][1] = 5
a[1][2] = 6
fmt.Println("二维数组中的第1个元素:", a[0])
fmt.Println("二维数组中的第2个元素:", a[1])
fmt.Println(a)
fmt.Println(a[0][0])
}
##
二维数组中的第1个元素: [1 2 3]
二维数组中的第2个元素: [4 5 6]
[[1 2 3] [4 5 6]]
1
4、访问二维数组
二维数组通过指定坐标来访问。如数组中的行索引与列索引,例如:
val := a[2][3]
或
var value int = a[2][3]
示例
package main
import "fmt"
//二维数组
func main() {
var a = [5][2]int{{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}}
var i, j int
for i = 0; i < 5; i++ { //行
for j = 0; j < 2; j++ { //列
fmt.Printf("a[%d][%d]=%d\n", i, j, a[i][j])
}
}
}
##
a[0][0]=0
a[0][1]=0
a[1][0]=1
a[1][1]=2
a[2][0]=2
a[2][1]=4
a[3][0]=3
a[3][1]=6
a[4][0]=4
a[4][1]=8
5、向函数中传递数组
示例
package main
import "fmt"
//求平均值
var number [5]int
func main() {
number = [5]int{10, 20, 30, 40, 50}
fmt.Println("元素和为", sum(number))
}
func sum(arr [5]int) int {
s := 0
for _, v := range arr {
s = s + v
}
return s
}
##
元素和为 150