博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go 数组
阅读量:5172 次
发布时间:2019-06-13

本文共 4603 字,大约阅读时间需要 15 分钟。

数组的定义和 初始化

数组是同一类型的元素集合

var a [3]int//定义⼀个数组

Go中数组下标从0开始,因此长度为n的数组下标范围:[0,n-1]

整数数组中的元素默认初始化为0,字符串数组中的元素默认初始化为" "

 

数组初始化

var a [3]inta[0] = 10a[1] = 20a[2] = 30//数组初始化
var a [3]int = [3]int{
10, 20, 30}//定义时数组初始化
a := [3]int{
10, 20, 30}//定义时数组初始化
a := […]int{
10, 20, 30}//定义时数组初始化
a := [3]int{
10}//定义时数组初始化
a := [3]int{
2:10}//定义时数组初始化

 

package mainimport "fmt"// 数组初始化func test1() {    var a [5]int    a[0] = 1    a[1] = 2    a[2] = 3    fmt.Println(a) // [1 2 3 0 0]}func test2() {    var a [5]int = [5]int{
1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5]}func test3() { a := [5]int{
1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5]}func test4() { a := [...]int{
1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5]}func test5() { a := [3]int{
5} fmt.Println(a) //[5 0 0]}func test6(){ a := [5]int{
3:30, 2:20} fmt.Println(a) //[0 0 20 30 0]}func main() { // test1() // test2() // test3() // test4() // test5() test6()}

数组的长度是类型的一部分

var a [3]int

a[0] = 10

a[1] = 20

a[2] = 30

var b [5]int

b = a  // 报错 a、b是不同类型的数组,不能赋值

package mainimport "fmt"func test1() {    // var a [3]int;    // b := [4]int{1,2,3,4}    // a = b   报错 不是 同类型的数组 不能直接 赋值    var c [4]int    d := [4]int{
1, 2, 3, 4} c = d fmt.Printf("c=%v\n", c) fmt.Printf("d=%v\n", d)}/*c=[1 2 3 4]d=[1 2 3 4]*/func main() { test1() }

 

数组的遍历

方式一

var a [3]inta[0] = 10a[1] = 20a[2] = 30for i := 0; i < len(a); i++ {}

方式二

var a [3]inta[0] = 10a[1] = 20a[2] = 30for index, val := range a {}

 

举例

package mainimport "fmt"func test1() {    a := [5]int{
1, 2, 3, 4, 5} for i := 0; i < len(a); i++ { fmt.Printf("a[%d]=%d\n", i, a[i]) }}func test2(){ a := [5]int{
1, 2, 3, 4, 5} for index, val := range a { fmt.Printf("a[%d]=%d\n", index, val) }}/*a[0]=1a[1]=2a[2]=3a[3]=4a[4]=5*/func main() { // test1() test2()}

二维数组

package mainimport "fmt"func test1() {    var a [3][2]int    a[0][0] = 1    a[0][1] = 2    a[1][0] = 3    a[1][1] = 4    a[2][0] = 5    a[2][1] = 6    fmt.Println(a) // [[1 2] [3 4] [5 6]]}func test2() {    var a [3][2]int = [3][2]int{
{
1, 2}, {
3, 4}, {
5, 6}} for i := 0; i < len(a); i++ { for j := 0; j < len(a[i]); j++ { fmt.Printf("a[%d][%d] = %d\n", i, j, a[i][j]) } fmt.Printf("\n") }}func test3(){ var a [3][2]int = [3][2]int{
{
1, 2}, {
3, 4}, {
5, 6}} for index, val := range(a){ for i,v:= range(val){ fmt.Printf("a[%d][%d] = %d\n", index, i ,v) } fmt.Printf("\n") }}func main() { // test1() // test2() test3()}

 

 

package  mainimport (     "fmt")func printarray(a [3][2]string) {     for _, v1 := range a {        for _, v2 := range v1 {             fmt.Printf("%s ", v2)        }        fmt.Printf("\n")     }}func main() {     a := [3][2]string{        {
"lion", "tiger"}, {
"cat", "dog"}, {
"pigeon", "peacock"}, } printarray(a) var b [3][2]string b[0][0] = "apple" b[0][1] = "samsung" b[1][0] = "microsoft" b[1][1] = "google" b[2][0] = "AT&T" b[2][1] = "T-Mobile" fmt.Printf("\n") printarray(b)}

 

数组拷贝和传参

数组是值类型

var a [3]inta[0] = 10a[1] = 20a[2] = 30b := a//b了数组a中所有元素b[0] = 1000fmt.Println(a, b)

a [10,20,30]

b [1000,20,30]

 

 数组是值类型,函数传参也会拷贝

func main() {    var a [3]int    a[0] = 10    a[1] = 20    a[2] = 30    modify(a)    fmt.Println(a)}func modify(b [3]int) {    b[0] = 1000    return}

a [10,20,30]

b [1000,20,30]

 

练习

求数组所有元素之和

package mainimport (    "fmt"    "math/rand"    "time")func test1(a [5]int) int {    var sum int    // for i := 0; i < len(a); i++ {    //     sum += a[i]    // }    for _, v := range a {        sum += v    }    return sum}func run() int {    rand.Seed(time.Now().Unix())  // 不设置 这个的话 rand.Intn()  取到的数据 都是 一样的      var a [5]int    for i := 0; i < len(a); i++ {        a[i] = rand.Intn(100)  // rand.Intn(n)  随机取出 0 - n-1 的整数        // a[i] = rand.Int()  // rand.Intn()  随机取出 0- int最大范围之间的 的整数    }    sum := test1(a)    return sum}func main() {    sum := run()    fmt.Println(sum)}
找出数组中和为给定值的两个元素的下标,例如数组:[1,3,5,8,7],找出两个元素之和等于8的下标分别是(0, 4)和(1,2)
 
package mainimport "fmt"// 找出数组中和为给定值的两个元素的下标,例如数组:[1,3,5,8,7],找出两个元素之和等于8的下标分别是(0, 4)和(1,2)func sumTwo(a [5]int, target int) {    for i := 0; i < len(a); i++ {        b := target - a[i]        for j := i + 1; j < len(a); j++ {            if b == a[j] {                fmt.Printf("(%d, %d)\n", i, j)            }        }    }}func main() {    var a [5]int = [5]int{
1, 2, 3, 7, 5} sumTwo(a, 8)}

 

 

转载于:https://www.cnblogs.com/ctztake/p/10296609.html

你可能感兴趣的文章
用html5实现音频播放器
查看>>
在python中独立运行orm
查看>>
HttpRunnerManager使用说明
查看>>
黑马程序员—多线程
查看>>
DataGrid
查看>>
hdu-1559 最大子矩阵(二维树状数组模板题)
查看>>
第一个超级简单Node.js实例
查看>>
单元测试
查看>>
js-JavaScript高级程序设计学习笔记19
查看>>
ubuntu12.04 登录黑屏
查看>>
js实战之-求一个字符串中最多出现的字符数
查看>>
【MySQL故障处理】 Seconds_Behind_Master= NULL Error_code: 1197
查看>>
杨锦锋师兄博士毕业答辩
查看>>
英文原版课程一些连接
查看>>
iOS textfield实现一行的数字限制,超出进行弹框
查看>>
WordCount
查看>>
进程之同步、互斥PV操作笔记
查看>>
XILINX ISE 13.2 安装步骤
查看>>
Mac下安装Redis
查看>>
【翻译】Ext JS最新技巧——2014-5-12
查看>>