通过将键与字符串数组进行比较来从地图中检索

时间:2018-04-19 20:38:13

标签: go

我有一些Go代码返回值的映射,但我只需要一些结果。有没有办法可以针对字符串数组(或类似的东西)测试/过滤地图的键,以提供简化的结果而不是一堆if语句?我查找的所有样本都有固定值来过滤。

下面是一个简单的例子,但是我没有提供我希望得到可能值列表的字符串,所以我可以得到一个简化列表。

package main

import "fmt"

type colors struct {
    animal  string
    COLOR   []string
}

func main() {
    // Map animal names to color strings.
    colors := map[string]string{
        "bird":  "blue",
        "snake": "green",
        "cat":   "black",
    }

    // Display string.
    fmt.Println(colors)
}

1 个答案:

答案 0 :(得分:1)

是的,您可以使用range测试/过滤地图。如果您拥有所有可能的值,则可以使用键/值查找将它们与地图进行比较,并根据该结构制作结构。

package main

import (
    "fmt"
)


type colors struct {
animal  string
COLOR   []string
}

func main() {
    //the list of values
    possibleValues := []string{"bird","dog", "cat"}
    // Map animal names to color strings.

    foo := map[string]string{
        "bird":  "blue",
            "snake": "green",
            "cat":   "black",
        }

    //slice of objects of your struct
    objects := []colors{}
    //for every value in the possible values
    for _, v := range possibleValues {
        //if it's in the map, make a new struct and append it to the slice of objects
        if val,ok := foo[v]; ok {
            objects = append(objects, colors{animal:v,COLOR:[]string{val}})
        }
    }
    // Display string.
    fmt.Println(objects)

}

https://play.golang.org/p/njD6E_WssHT