首页 > 技术分享 > Golang
收藏

Go语言数组

04/03 17:05
大潇博客 原创文章,转载请标明出处

初始化数组的方式

var arr1 [3]int = [3]int{11,22,33}

var arr2 = [...]float64{11.1, 22.2, 33.3} //这里的...是规定的写法,不限制数组元素个数,但数组定义后不能再增加元素

var arr3 = [...]int8{1:3, 2:6, 0:9, 5:2, 8:5, 3:8} //带key

arr4 := [...]int32{111,222,333,555,888} //类型推导

//var arr4 = [...]string{"aa", "bb", "cc"} //字符串必须使用双引号

fmt.Println(arr1, arr2, arr3, arr4, arr5)


数组入门,定义数组

var arr [3]int

arr[0] = 11

arr[1] = 22

arr[2] = 33

fmt.Println(arr, len(arr)) //打印数组和数组长度


举例:定义一个包含三个元素的数组,求和求平均值

var arr [3]float64  //求平均时可能会产生小数,建议数组元素为float64

arr[0] = 11.1

arr[1] = 22.2

arr[2] = 30.0

var sum float64

for i := 0; i < len(arr); i++ {

sum += arr[i]

}

n := fmt.Sprintf("%.2f", sum / float64(len(arr)))  //%.2f表示保留两位小数

fmt.Printf("arr内元素的和是:%v \n", sum)

fmt.Printf("arr内元素的平均数是:%v \n", n)


举例:从终端输入2个数,保存到数组并输出

var number [2]float64 //定义数组

var totalNum float64

for i := 0; i < len(number); i++ {

fmt.Printf("请输入第%d个数 \n", i)

fmt.Scan(&number[i]) //获取终端输入并通过地址赋值

}

fmt.Printf("输入的数据为:%v \n", number)

for i := 0; i < len(number); i++ {

totalNum += number[i]

}

fmt.Printf("总和是:%v \n", totalNum)


使用for-range遍历数组

//第一个返回值index是数组下标,第二个value是在该下标位置的值,仅在for-range内有效

for index, value := range array5 {

fmt.Println(index, value)

}

//遍历时,对于不想使用的变量,可以使用下划线”_“忽略

for _, value := range array5 {

fmt.Println(value)

}

for index, _ := range array5 {

fmt.Printf("%v => %v \n", index, array5[index])

}


数组注意事项

1、使用数组的步骤:

  • 声明数组并开辟空间
  • 给数组各个元素赋值(默认零值)
  • 使用数组

2、数组创建后,如果没有赋值,则使用默认值(零值)

  • 数值类型数组,默认值为0
  • 字符串数组,默认值为""
  • bool数组,默认值为false

3、数组中的元素可以是任意数据类型,包括值类型和引用类型,但是不能混用(即:每个数组中元素的数据类型必须相同)

4、一个数组一旦声明长度后,不能动态变化,数组下标从0开始,使用数组时,下标必须在指定范围内,否则报错“panic:数组越界”(比如:数组 var arr [5]int 默认的有效下标为0-4)

5、Go的数组属于值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响

6、如想在其它函数中,去修改原来的数组,可以使用引用方式(指针)



7、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度

8、var arr []int,这样定义时,arr是切片并非数组




打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311