切片常见操作

切片常见操作

切片是 Go 语言中常用的数据结构之一,具有灵活的长度和容量。下面介绍一些常见的切片操作:

  1. 创建切片

创建切片可以使用 make 函数或者直接使用切片字面量。例如:

// 使用 make 函数创建长度为 5,容量为 10 的整型切片
s := make([]int, 5, 10)

// 直接创建整型切片
s := []int{1, 2, 3, 4, 5}

  1. 切片截取

切片可以通过下标进行截取,即获取原切片的一部分。例如:

// 创建一个包含 5 个元素的整型切片
s := []int{1, 2, 3, 4, 5}

// 截取从下标 1 开始,到下标 3 结束(不包括下标 3)的子切片
sub := s[1:3]
fmt.Println(sub) // [2 3]

  1. 切片追加

切片可以使用 append 函数追加元素。如果追加的元素个数超过了切片的容量,那么会重新分配更大的内存空间。例如:

s1 := []int{1, 2, 3}
s2 := []int{4, 5, 6}

// 将 s2 中的元素追加到 s1 中,并返回新的切片
s3 := append(s1, s2...)
fmt.Println(s3) // [1 2 3 4 5 6]

  1. 切片复制

切片可以使用 copy 函数进行复制。该函数会将源切片的元素复制到目标切片中,如果目标切片的长度不足,只会复制到目标切片的长度为止。同时要注意copy的参数必须是 slice 不能是数组,所以如果数组a要使用copy,则需要传递a[:]。例如:

// 创建源切片和目标切片
src := []int{1, 2, 3}
dst := make([]int, 2)

// 复制源切片中的元素到目标切片中
n := copy(dst, src)
fmt.Println(n, dst) // 2 [1 2]

  1. 切片遍历

切片可以使用 for 循环进行遍历。例如:

s := []int{1, 2, 3}

for i, v := range s {
    fmt.Println(i, v)
}

上面的代码中,使用 range 关键字遍历切片 s,获取每个元素的下标和值,并打印出来。

  1. 切片长度和容量

切片的长度和容量可以使用 lencap 函数获取。其中,长度表示切片中元素的个数,容量表示切片底层数组的长度。例如:

s := make([]int, 5, 10)
fmt.Println(len(s), cap(s)) // 5 10
``

  1. 判断切片是否相等
    判断切片是否相等需要遵循以下规则:
    1. 切片只能与 nil 比较相等,不能与其他类型的数据比较;
    2. 切片相等的条件是:长度相等,所有元素都相等。

下面是一个示例代码,用于判断两个整型切片是否相等:

func equal(a, b []int) bool {
    if len(a) != len(b) {
        return false
    }
    for i, v := range a {
        if v != b[i] {
            return false
        }
    }
    return true
}

func main() {
    s1 := []int{1, 2, 3}
    s2 := []int{1, 2, 3}
    s3 := []int{3, 2, 1}

    fmt.Println(equal(s1, s2)) // true
    fmt.Println(equal(s1, s3)) // false
}

上面的代码中,equal 函数用于判断两个整型切片是否相等,如果长度不等或者元素不等,则返回 false。在 main 函数中,我们测试了两个相等的切片 s1s2,以及一个不相等的切片 s3。其中,s1s2 是相等的,因为它们长度相等,元素也都相等,而 s3s1 不相等,因为它们的元素顺序不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值