Maison > développement back-end > Golang > Comment puis-je lire efficacement plusieurs nombres dans une tranche Go à l'aide de « fmt.Fscan() » ?

Comment puis-je lire efficacement plusieurs nombres dans une tranche Go à l'aide de « fmt.Fscan() » ?

DDD
Libérer: 2024-11-25 06:44:15
original
944 Les gens l'ont consulté

How Can I Efficiently Read Multiple Numbers into a Go Slice Using `fmt.Fscan()`?

Analyse des nombres à partir d'une entrée standard dans Go

Lorsque vous travaillez avec plusieurs entrées numériques, Go permet aux développeurs d'utiliser plusieurs variables pour capturer des valeurs individuelles. Cependant, que se passe-t-il si vous souhaitez simplifier ce processus et stocker tous les nombres dans un seul tableau ou tranche ?

Considérez l'extrait de code suivant :

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])
Copier après la connexion

Ce code lit efficacement deux nombres et stocke les dans la tranche de chiffres. Cependant, si vous disposez d'un grand nombre d'entrées, cette approche peut devenir verbeuse.

Pouvez-vous lire des nombres directement dans une tranche à l'aide de fmt.Fscan() ?

Malheureusement, le package fmt ne prend pas en charge nativement la numérisation en tranches. Pour surmonter cette limitation, vous pouvez créer une fonction utilitaire personnalisée pour regrouper les adresses de tous les éléments de la tranche dans un tableau d'interfaces :

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}
Copier après la connexion

Cette fonction parcourt la tranche, créant un tableau de pointeurs vers chaque élément. .

Utilisation de la fonction packAddrs() pour scanner une tranche

Avec la fonction packAddrs(), vous peut maintenant numériser une tranche comme ceci :

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Copier après la connexion

La fonction packAddrs() convertit la tranche en un tableau d'interfaces, permettant à fmt.Fscan() de numériser chaque élément.

Exemple d'utilisation de fmt.Sscan() pour les tests

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)
Copier après la connexion

Dans cet exemple, je teste le code en utilisant fmt.Sscan(). Il prend une chaîne en entrée et renvoie les valeurs numérisées. Le résultat de ce code est :

[1 3 5 7 9] 5 <nil>
Copier après la connexion

Cela montre comment vous pouvez lire efficacement plusieurs nombres dans une tranche en utilisant la fonction utilitaire packAddrs().

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal