Maison > développement back-end > Golang > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-31 20:12:02
original
407 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!