GO语言的数组

目录

一维数组

1、声明数组

2、初始化数组

3、访问数组元素

示例

示例----for range//键值循环

示例----找出和为8的两个元素的下标

找最大值

冒泡排序

不定长数组添加元素

4、数组是值类型

多维数组

1、多维数组声明

2、二维数组

示例

3、初始化二维数组

示例

4、访问二维数组

示例

5、向函数中传递数组

示例


一维数组

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

数组元素可以通过索引(位置)来读取(或者修改),索引从О开始,第一个元素索引为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值