Maison >développement back-end >Golang >Comment initialiser un tableau dans Go sans utiliser de boucle for ?

Comment initialiser un tableau dans Go sans utiliser de boucle for ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 20:12:02474parcourir

How can I initialize an array in Go without using a for loop?

Initialisation d'un tableau dans Go sans boucle For

Lorsque vous travaillez avec des tableaux dans Go, il est souvent nécessaire d'initialiser leurs valeurs. La méthode la plus simple consiste à utiliser une boucle for, comme le montre l'exemple suivant :

<code class="go">for i := 0; i < n; i++ {
    A[i] = true
}</code>

Cependant, cette approche peut devenir fastidieuse pour les grands tableaux. Heureusement, il existe plusieurs alternatives disponibles.

Litéraux composites

Les littéraux composites vous permettent de créer et d'initialiser des tableaux et des tranches de manière plus concise :

<code class="go">b1 := []bool{true, true, true}
b2 := [3]bool{true, true, true}</code>

Notez que les littéraux composites initialiseront toujours le tableau à la valeur zéro pour le type donné. Dans le cas de bool, cela signifie que toutes les valeurs seront fausses.

Utiliser une constante

Si vous souhaitez initialiser tous les éléments à une valeur spécifique (par exemple, true ), vous pouvez introduire une constante et l'utiliser dans le littéral composite :

<code class="go">const T = true
b3 := []bool{T, T, T}</code>

Logique alternative

Dans certaines situations, il peut être plus efficace de stocker la inverse des valeurs souhaitées dans le tableau. Cela vous permet de profiter du comportement du tableau mis à zéro par défaut :

<code class="go">presents := []bool{true, true, true, true, true, true}

// Equivalent to:
missings := make([]bool, 6) // All false (not missing)</code>

Fonctionnement efficace du "memset"

Si les performances sont critiques, vous pouvez envisager d'utiliser ce qui suit implémentation de l'opération memset :

<code class="go">import (
    "bytes"
    "unsafe"
)

func memset(p []interface{}, v interface{}) {
    b := bytes.NewBuffer(make([]byte, unsafe.Sizeof(v)))
    b.Reset()
    for i := range p {
        b.Write(b.Bytes())
        copy(p[i:i+1], *(*[]byte)(unsafe.Pointer(&v)))
    }
}</code>

Cette approche est particulièrement efficace pour les grands tableaux.

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