ch9、数组和切片

ch9、数组和切片

什么是数组?用于保存一组相同类型的数据结构。

1、数组声明、初始化

Go中数组定义之后就就有默认的初始值,默认初始值就是保存数据类型的默认值(零值)。

package array_test

import "testing"

func TestArrayInit(t *testing.T) {
   
	// 方式一: 先声明后使用,默认值是int默认值
	var arr [3]int
	// 方式二:声明即初始化为默认值,推荐使用该方法
	arr1 := [4]int{
   1, 2, 3, 4}
    // 方式三:通过...来声明并初始化,不使用...表示的是切片(slice)
	arr2 := [...]int{
   1, 3, 4, 5}
	arr1[1] = 5
	t.Log(arr[1], arr[2])
	t.Log(arr1, arr2)
}
  • 数组比较注意点

    • Go语言中数组长度也是数据类型的一部分

    • 如果元素类型支持==、!=操作时,那么数组也支持此操作

    package main
    
    import "fmt"
    
    func main() {
         
    	var arr1 [3]int = [3]int{
         1, 3, 5}
    	var arr2 [3]int = [3]int{
         1, 3, 5}
    	var arr3 [3]int = [3]int{
         2, 4, 6}
    	var arr4 [3]float64 = [3]float64{
         1.0, 3.0, 5.0}
    	// 首先会判断`数据类型`是否相同,如果相同会依次取出数组中`对应索引的元素`进行比较,
    	// 如果所有元素都相同返回true,否则返回false
    	fmt.Println(arr1 == arr2) // true
    	fmt.Println(arr1 == arr3) // false
    	// fmt.Println(arr1 == arr4) // error
    }
    
    • Go语言中的数组是值类型, 赋值和传参时会复制整个数组
    package main
    
    import "fmt"
    
    func main() {
         
    	var arr1 [3]int = [3]int{
         1, 3, 5}
    	var arr2 [3]int = arr1
    	arr2[0] = 666
    	fmt.Println(arr1) // [1 3 5]
    	fmt.Println(arr2) // [666 3 5]
    }
    

2、遍历

go语言,只支持for,故可以使用常规for循环进行遍历

但go提供了range来快速遍历,用法如下:

package array_test

import "testing"

func TestArrayTravel(t *testing.T) {
   
	arr3 := [...]int{
   1, 3, 4, 5}
	for i := 0; i < len(arr3); i++ {
   
		t.Log(arr3[i])
	}

	for idx, e := range arr3 {
    // 表示索引,值,如果不需要索引或值,如何表示?
		t.Log(idx, e)
	}

	for _, e := range arr3 {
    // 如果不需要索引或值,使用_变量来表示,代表“占位”
		t.Log(e)
	}
}

3、数组(array)截取(切片,slice,切片初始化的一种方法)

a[开始索引(包含):结束索引(不包含)],左闭右开

如:a[2:len(a)]

go语言不支持负数截取,截取后的类型变为切片(slice,不是数组array)

package array_test

import "testing"

func TestArraySection(t *testing.T) {
   
	arr3 := [...]int{
   1, 2, 3, 4, 5}
	t.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值