Maison >développement back-end >Golang >Comment utiliser copy() en langage Go

Comment utiliser copy() en langage Go

青灯夜游
青灯夜游original
2023-01-10 11:48:513092parcourir

En langage Go, copy() est utilisé pour copier des tranches. Vous pouvez copier une tranche de tableau vers une autre tranche de tableau. Si les deux tranches de tableau ajoutées n'ont pas la même taille, la plus petite sera utilisée. ; la syntaxe est "copier (tranche source de données, tranche de destination de copie)". Lorsque vous utilisez la fonction copy() pour copier une tranche, si la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie sera incomplète.

Comment utiliser copy() en langage Go

L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.

La fonction intégrée copy() du langage Go peut copier une tranche de tableau dans une autre tranche de tableau. Si les deux tranches de tableau ajoutées n'ont pas la même taille, elles seront copiées en fonction du nombre d'éléments de la tranche de tableau la plus petite.

Copie en langage Go() : copie de tranche (copie de tranche)

La copie de tranche en langage Go utilise la fonction copy() intégrée. Lorsque vous utilisez la fonction copy() pour copier une tranche, si la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie sera incomplète. Le format d'utilisation de la fonction

copy() est le suivant :

copy( destSlice, srcSlice []T) int
  • srcSlice est la tranche source de données

  • destSlice est la cible de la copie (c'est-à-dire, copier srcSlice vers destSlice)

    La tranche cible doit avoir alloué de l'espace et être suffisant pour le transporter. Le nombre d'éléments copiés, et les types de source et de cible doivent être cohérents

Valeur de retour :

  • Indique le nombre d'éléments réellement copiés.

Explication

  • Copiez la tranche src dans la tranche dst et renvoyez le nombre d'éléments copiés avec succès. Si la longueur de la tranche src est supérieure à la longueur de la tranche dst, seuls les éléments de longueur de tranche dst sont copiés.

Le code suivant montre le processus d'utilisation de la fonction copy() pour copier une tranche dans une autre :

slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}
copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置

Bien que copier des éléments de tranche via une boucle soit plus simple, la fonction copy() intégrée est plus pratique pour utiliser, copier Le premier paramètre de la fonction () est la tranche cible à copier, et le deuxième paramètre est la tranche source. Les deux tranches peuvent partager le même tableau sous-jacent, et il n'y a aucun problème même si elles se chevauchent.

Cas

1. Utilisez du code pour démontrer l'impact des opérations de référence et de copie sur les éléments slice sur les éléments slice.

package main
import "fmt"
func main() {
    // 设置元素数量为1000
    const elementCount = 1000
    // 预分配足够多的元素切片
    srcData := make([]int, elementCount)
    // 将切片赋值
    for i := 0; i < elementCount; i++ {
        srcData[i] = i
    }
    // 引用切片数据
    refData := srcData
    // 预分配足够多的元素切片
    copyData := make([]int, elementCount)
    // 将数据复制到新的切片空间中
    copy(copyData, srcData)
    // 修改原始数据的第一个元素
    srcData[0] = 999
    // 打印引用切片的第一个元素
    fmt.Println(refData[0])
    // 打印复制切片的第一个和最后一个元素
    fmt.Println(copyData[0], copyData[elementCount-1])
    // 复制原始数据从4到6(不包含)
    copy(copyData, srcData[4:6])
    for i := 0; i < 5; i++ {
        fmt.Printf("%d ", copyData[i])
    }
}

Comment utiliser copy() en langage Go

La description du code est la suivante :

  • La ligne 8 définit le nombre total d'éléments comme 1000.

  • Ligne 11, pré-allouer une tranche entière de 1000 éléments, cette tranche sera utilisée comme données d'origine.

  • Lignes 14 à 16, remplissez srcData avec des valeurs entières de 0 à 999.

  • Ligne 19, refData fait référence à srcData, et la tranche ne copiera pas les éléments en raison de l'opération de signe égal.

  • Ligne 22, pré-allouer une tranche copyData de même taille (taille égale) et de même type que srcData.

  • Ligne 24, utilisez la fonction copy() pour copier les données originales dans l'espace de tranche copyData.

  • Ligne 27, modifiez le premier élément des données originales en 999.

  • Ligne 30, le premier élément des données référencées va changer.

  • Ligne 33, imprime les premières données des données copiées Puisque les données sont copiées, elles ne changeront pas.

  • Ligne 36, copiez les données locales de srcData dans copyData.

  • Ligne 38~40, imprimez l'élément copyData après avoir copié les données locales.

2. Lorsque la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie est incomplète

package main
import (
	"fmt"
)
func main() {
	//当源切片的长度大于目的切片长度时,复制不完整
	var sliceSrc = []string{"PHPCN", "Python", "Golang"}
	var sliceDst = []string{"Hello", "HaiCoder"}
	copy(sliceDst, sliceSrc)
	fmt.Println("sliceDst =", sliceDst)
}

Comment utiliser copy() en langage Go

[Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn