Maison > développement back-end > Golang > Comment puis-je initialiser efficacement des tableaux dans Go, de la même manière que le memset de C ?

Comment puis-je initialiser efficacement des tableaux dans Go, de la même manière que le memset de C ?

Barbara Streisand
Libérer: 2024-12-25 20:03:11
original
232 Les gens l'ont consulté

How Can I Efficiently Initialize Arrays in Go, Similar to C  's memset?

Existe-t-il un équivalent de memset en Go ?

En C , la fonction memset permet l'initialisation efficace de tableaux avec des valeurs spécifiques. En Go, bien qu'il n'y ait pas d'équivalent direct, plusieurs techniques peuvent obtenir des résultats similaires.

Itération de boucle

L'approche la plus simple consiste à utiliser une boucle pour définir chaque élément de un tableau à la valeur souhaitée.

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
Copier après la connexion

Répété copy()

En profitant de la fonction copy() hautement optimisée, nous pouvons exploiter un modèle de copie répétée pour définir efficacement les valeurs du tableau.

func memsetRepeat(a []int, v int) {
    if len(a) == 0 {
        return
    }
    a[0] = v
    for bp := 1; bp < len(a); bp *= 2 {
        copy(a[bp:], a[:bp])
    }
}
Copier après la connexion

Résultats de l'analyse comparative

Pour évaluer les performances de ces techniques, nous les comparons les unes aux autres pour différents tableaux tailles.

var a = make([]int, 1000) // Size will vary

func BenchmarkLoop(b *testing.B) {
    for i := 0; i < b.N; i++ {
        memsetLoop(a, 10)
    }
}

func BenchmarkRepeat(b *testing.B) {
    for i := 0; i < b.N; i++ {
        memsetRepeat(a, 11)
    }
}
Copier après la connexion

Les résultats montrent que memsetRepeat() surpasse memsetLoop() pour les tableaux plus grands, démontrant son efficacité pour une initialisation rapide.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal