go语言数组

Go语言:https://golang.org/

Go语言中文网:https://studygolang.com/

注意事项

1 数组不可动态变化问题,一旦声明了,其长度就是固定的。
 如果数组长度不确定可以使用...代替数组长度
2 数组赋值问题,同样类型的数组(长度一样且每个元素类型也一样)才可以相互赋值,反之不可以。
3 import 某个库时未使用时,会报错。比如.go文件头部引用了import "fmt",而代码中未使用fmt会报错

# 数组简介

Go 语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。数组元素可以通过索引(位置)来读取(或者修改),索引从 0 开始,第一个元素索引为 0,第二个索引为 1,以此类推。

# 用法

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var variable_name [SIZE] variable_type

以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10] float32

# 初始化数组

以下演示了数组初始化:
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}

# 演示:数组的声明、赋值、访问

// 示例一
package main
import "fmt"

func main() {
  var n [10]int /* n 是一个长度为 10 的数组 */
  var i,j int

  /* 为数组 n 初始化元素 */        
  for i = 0; i < 10; i++ {
     n[i] = i + 100 /* 设置元素为 i + 100 */
  }

  /* 输出每个数组元素的值 */
  for j = 0; j < 10; j++ {
     fmt.Printf("Element[%d] = %d\n", j, n[j] )
  }
}

运行结果:
C:\Go\www>go run dengyu.go
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

// 示例二
package main
import "fmt"

func main() {
  var i,j,k int
  // 声明数组的同时快速初始化数组
  balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

  /* 输出数组元素 */
  for i = 0; i < 5; i++ {
     fmt.Printf("balance[%d] = %f\n", i, balance[i] )
  }
 
  balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  /* 输出每个数组元素的值 */
  for j = 0; j < 5; j++ {
     fmt.Printf("balance2[%d] = %f\n", j, balance2[j] )
  }

  //  将索引为 1 和 3 的元素初始化
  balance3 := [5]float32{1:2.0,3:7.0}  
  for k = 0; k < 5; k++ {
     fmt.Printf("balance3[%d] = %f\n", k, balance3[k] )
  }
}

运行结果:
C:\Go\www>go run dengyu.go
balance[0] = 1000.000000
balance[1] = 2.000000
balance[2] = 3.400000
balance[3] = 7.000000
balance[4] = 50.000000
balance2[0] = 1000.000000
balance2[1] = 2.000000
balance2[2] = 3.400000
balance2[3] = 7.000000
balance2[4] = 50.000000
balance3[0] = 0.000000
balance3[1] = 2.000000
balance3[2] = 0.000000
balance3[3] = 7.000000
balance3[4] = 0.000000

# 注意事项:数组不可动态变化问题,一旦声明了,其长度就是固定的

package main
import "fmt"

func main() {
var arr_1 = [5] int {1, 2, 3, 4, 5}
arr_1[5] = 6
fmt.Println(arr_1)
}

运行结果:
C:\Go\www>go run dengyu.go
# command-line-arguments
.\dengyu.go:6:7: invalid array index 5 (out of bounds for 5-element array)

# 注意事项:数组赋值问题,同样类型的数组(长度一样且每个元素类型也一样)才可以相互赋值,反之不可以

package main

func main() {
var arr = [5] int {1, 2, 3, 4, 5}
var arr_1 [5] int = arr
var arr_2 [6] int = arr
}

运行结果:
C:\Go\www>go run dengyu.go
# command-line-arguments
.\dengyu.go:7:6: cannot use arr (type [5]int) as type [6]int in assignment

# 多维数组声明

Go 语言支持多维数组,以下为常用的多维数组声明方式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

以下实例声明了三维的整型数组:
var threedim [5][10][4]int

# 定义二维数组

二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:
var arrayName [ x ][ y ] variable_type

# 二维数组示例

package main
import ("fmt")

func main() {
v := [][]int{}
arr_1 := []int{1,2,3}
arr_2 := []int{4,5,6}

v = append(v, arr_1)
v = append(v,arr_2)

fmt.Println("数组一")
fmt.Println(v[0])
fmt.Println("数组二")
fmt.Println(v[1])
fmt.Println("访问第一个元素")
fmt.Println(v[0][0])
}
运行结果:
C:\Go\www>go run dengyu.go
数组一
[1 2 3]
数组二
[4 5 6]
访问第一个元素
1

# 初始化二维数组

// 示例一
package main
import ("fmt")
func main() {
arr := [][]string{
{"onn","two","three"},
{"four","five","six"},
{"severn","eight","nigh"},
}
fmt.Println("打印二维数组")
fmt.Println(arr)
}

运行结果:
C:\Go\www>go run dengyu.go
打印二维数组
[[onn two three] [four five six] [severn eight nigh]]


// 示例二
package main
import ("fmt")
func main() {
arr := [][]string{
{"onn","two","three"},
{"four","five","six"},
{"severn","eight","nigh"}
}
fmt.Println("打印二维数组")
fmt.Println(arr)
}

运行结果:
C:\Go\www>go run dengyu.go
# command-line-arguments
.\dengyu.go:8:29: syntax error: unexpected newline, expecting comma or }

注意:以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:
a := [3][4]int{  
{0, 1, 2, 3} ,   /*  第一行索引为 0 */
{4, 5, 6, 7} ,   /*  第二行索引为 1 */
{8, 9, 10, 11}}   /* 第三行索引为 2 */

(完)


(完)