Home  >  Article  >  Backend Development  >  Calculate slice length in structure field

Calculate slice length in structure field

WBOY
WBOYforward
2024-02-09 14:09:19542browse

Calculate slice length in structure field

php Xiaobian Yuzai will introduce to you how to calculate the slice length in the structure field. In programming, a struct is a data structure used to organize related data. In some cases, we may need to calculate the slice length in the structure field in order to perform related operations in the program. Calculating the slice length of a structure field can help us better understand and process data, and improve the efficiency and accuracy of the program. Next, we will explain in detail how to perform the calculation and give corresponding examples.

Question content

I think I need a better solution than case switching because the struct gets more fields and my function will become verbose. Is there a way to change my switch to loop?

I have the following code

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
}

This works for me, but the real structure contains 12 fields, which makes my function long and repetitive.

I tried

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

But when I ran the code it took me a moment to notice that it wasn't working as expected, I was getting the length of the string. I tried data[value] but that doesn't work either.

Solution

Is there a way to change my switch to a loop?

You can do the following:

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
}

The above is the detailed content of Calculate slice length in structure field. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete