Golang 教程
Golang 控制语句
Golang 函数 & 方法
Golang 切片 & 数组
Golang 结构体
Golang 字符串
Golang 接口
Golang 指针
Golang 并发
Golang 异常(Error)
Golang 其他杂项

Go 语言切片复制

时间:2023年06月10日 阅读:189
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

切片是相似类型的存储元素,则不允许不同类型的元素的存储在同一条带的可变长度序列。在切片中,您可以使用Go语言提供的copy()函数将一个切片复制到另一个切片中。换句话说,通过copy()函数可以将一个切片的元素复制到另一切片中。

语法:

func copy(dst, src []Type) int

此处,dst表示目标切片,而src表示源切片。它将返回要复制的元素数量,该数量应len(dst)len(src)最小值。让我们借助给定的示例演示如何使用:

package main

import "fmt"

func main() {

    //创建切片
    slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65}
    var slc2 []int
    slc3 := make([]int, 5)
    slc4 := []int{78, 50, 67, 77}

    //复制之前
    fmt.Println("Slice_1:", slc1)
    fmt.Println("Slice_2:", slc2)
    fmt.Println("Slice_3:", slc3)
    fmt.Println("Slice_4:", slc4)

    //复制切片
    copy_1 := copy(slc2, slc1)
    fmt.Println("\nSlice:", slc2)
    fmt.Println("复制的元素总数:", copy_1)

    copy_2 := copy(slc3, slc1)
    fmt.Println("\nSlice:", slc3)
    fmt.Println("复制的元素总数:", copy_2)

    copy_3 := copy(slc4, slc1)
    fmt.Println("\nSlice:", slc4)
    fmt.Println("复制的元素总数:", copy_3)

    //这里不要混淆,因为在上面
    //复制了slc4的代码行
    //并因此进行永久修改,即
    // slc 4包含[58 69 40 45]
    copy_4 := copy(slc1, slc4)
    fmt.Println("\nSlice:", slc1)
    fmt.Println("复制的元素总数:", copy_4)
}

输出:

Slice_1: [58 69 40 45 11 56 67 21 65]
Slice_2: []
Slice_3: [0 0 0 0 0]
Slice_4: [78 50 67 77]

Slice: []
复制的元素总数: 0

Slice: [58 69 40 45 11]
复制的元素总数: 5

Slice: [58 69 40 45]
复制的元素总数: 4

Slice: [58 69 40 45 11 56 67 21 65]
复制的元素总数: 4

用法说明:在上面的示例中,我们有四个整数类型切片,并对它们执行复制操作:

  • copy 1:= copy(slc2, slc1):在这里,slc2是目标片,slc1是源片。这里,当我们尝试在slc2片中复制slc1片时,slc2是nil切片,那么copy方法将返回源切片和目标切片的最小长度,对于空切片slc2,最小长度为0。

  • copy_2:= copy(slc3,slc1):在这里,slc3是目标切片,而slc1是源切片。 此处,slc3切片是空切片,因此当我们尝试使用copy()函数将slc1切片复制到slc3时,由于该切片的长度为5,因此它仅从slc1切片复制了5个元素,因为该切片的长度为5,因此可以 不存储大于5的元素。

  • copy_3:= copy(slc4,slc1):在这里,slc4是目标切片,而slc1是源切片。当我们尝试使用copy()函数将slc1 slice 复制到slc4 slice时,它仅从索引0开始复制其中的4个元素。由于slc4 切片 的长度为4,因此它不能存储大于4的元素。

  • copy_4:= copy(slc1,slc4):在这里,输出后可能会感到困惑。 请参见,上面的代码行中的slc4已更新。 因此,现在考虑slc4的更新值。 因此,现在slc4具有4个元素,而slc1具有9个元素。 因此,将要复制的元素总数为4。

范例2:

package main 
  
import "fmt"
  
func main() { 
  
    //源切片
    slice_1 := []string{"momojcs", "for", "momojcs", "GFG"} 
  
    //创建目标切片,使用make函数
    slice_2 := make([]string, 3) 
  
    //复制前
    fmt.Println("Slice_1: ", slice_1) 
    fmt.Println("Slice_2: ", slice_2) 
  
    //将slice_1复制到slice_2
    Copy_1 := copy(slice_2, slice_1) 
    fmt.Println("\nSlice_1: ", slice_1) 
    fmt.Println("Slice_2: ", slice_2) 
    fmt.Println("复制的元素数: ", Copy_1) 
  
        //复制切片
        //使用复制功能
        //清楚地看到代码
    Copy_2 := copy(slice_1, []string{"123momojcs", "gfg"}) 
    fmt.Println("\nSlice_1 : ", slice_1) 
    fmt.Println("复制的元素数:", Copy_2)   
}

输出:

Slice_1:  [momojcs for momojcs GFG]
Slice_2:  [  ]

Slice_1:  [momojcs for momojcs GFG]
Slice_2:  [momojcs for momojcs]
复制的元素数:  3

Slice_1:  [123momojcs gfg momojcs GFG]
复制的元素数: 2
打赏

本文地址:https://www.momojc.cn/golang/go-copy-one-slice-into-another-slice.html

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.045 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计