Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-11-25 06:44:15929parcourir

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])

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
}

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)

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)

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>

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!

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