Maison  >  Article  >  développement back-end  >  Calculer la longueur de la tranche dans le champ de structure

Calculer la longueur de la tranche dans le champ de structure

WBOY
WBOYavant
2024-02-09 14:09:19544parcourir

Calculer la longueur de la tranche dans le champ de structure

L'éditeur php Yuzai vous présentera comment calculer la longueur de la tranche dans le champ structure. En programmation, une structure est une structure de données utilisée pour organiser les données associées. Dans certains cas, nous devrons peut-être calculer la longueur de la tranche dans le champ structure afin d'effectuer les opérations associées dans le programme. Le calcul de la longueur de tranche d'un champ de structure peut nous aider à mieux comprendre et traiter les données, et à améliorer l'efficacité et la précision du programme. Ensuite, nous expliquerons en détail comment effectuer le calcul et donnerons des exemples correspondants.

Contenu de la question

Je pense que j'ai besoin d'une meilleure solution que le changement de casse car la structure obtient plus de champs et ma fonction deviendra verbeuse. Existe-t-il un moyen de changer mon switch en boucle ?

J'ai le code suivant

type things struct {
    streetnames    []string `json:"streetnames"`
    letters        []string `json:"letters"`
    malenames      []string `json:"malenames"`
}

func checkcategories(data *things, filepath string) error {
    errmsg := "list has no values or is a missing category in file: " + filepath
    categories := []string{"street_name", "letter", "male_first_name"}
    for _, value := range categories {
        switch value {
        case "street_name":
            if len(data.streetnames) == 0 {
                return errors.new("street_name " + errmsg)
            }
        case "letter":
            if len(data.letters) == 0 {
                return errors.new("letter " + errmsg)
            }
        case "male_first_name":
            if len(data.malenames) == 0 {
                return errors.new("male_first_name " + errmsg)
            }
        }
    }
    return nil
}

Cela fonctionne pour moi, mais la structure réelle contient 12 champs, ce qui rend ma fonction longue et répétitive.

Je l'ai essayé

for _, value := range categories {
        if len("data." + value) == 0 {
            return errors.New(value + errMsg)
}

Mais lorsque j'ai exécuté le code, il m'a fallu un moment pour remarquer qu'il ne fonctionnait pas comme prévu, j'obtenais la longueur de la chaîne. J'ai essayé data[value] mais cela ne fonctionne pas non plus.

Solution

Y a-t-il un moyen de changer mon switch en boucle ?

Vous pouvez faire ce qui suit :

type Things struct {
    StreetNames []string `json:"streetNames"`
    Letters     []string `json:"letters"`
    MaleNames   []string `json:"maleNames"`
}

func CheckCategories(data *Things, filePath string) error {
    errMsg := "list has no values or is a missing category in File: " + filePath
    categories := []struct{
        name  string
        slice []string
    }{
        {"street_name", data.StreetNames},
        {"letter", data.Letters},
        {"male_first_name", data.MaleNames},
    }

    for _, v := range categories {
        if len(v.slice) == 0 {
            return errors.New(v.name + " " + errMsg)
        }
    }
    return nil
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer