如何检查struct中是否存在值以及如何在数组中保存另一个值

时间:2019-03-08 18:39:23

标签: arrays loops go hashmap

我不确定在Go中如何执行此操作,我只是开始使用它,因此我不知道应该如何执行。

想法是这样的:我在函数内创建了一个struct

XSiteGroup := struct {
        siteURL string
        siteIDs []string
    }{}

我实现了一个获取对象数组的请求;该对象具有以下结构:

{
   "siteId": "",
   "merchantName": "",
   "friendlyTitle": "",
   "url": ""
 }

我想做的是遍历该数组并将每个我发现的url存储为一个没有重复的“键”,然后将每个对象的siteId值存储在{{ 1}}结构siteIDs的数组。因此,我们假设以下情形:

XSiteGroup

具有上面的结果,我需要存储类似的内容:

{
   "siteId": "5050",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url1.com"
},
{
   "siteId": "4050",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url2.com"
},
{
   "siteId": "8060",
   "merchantName": "",
   "friendlyTitle": "",
   "url": "url1.com"
}

我现在有这样的东西来循环我拥有的网站阵列:

{
  siteURL: "url1.com",
  siteIDs: ["5050", "8060"]
}

如果我不清楚或需要什么其他信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果该值不存在,则必须创建它。您可以使用value, ok := map[key]进行检查。

type xsitegroup struct {
    url     string
    ids     []string
}

# A mapping between urls and their site groups.
sitegroups := make(map[string]*xsitegroup)

for _, website := range xwebsites {
    url := website["url"]

    sitegroup, ok := sitegroups[url]

    # A sitegroup for this URL doesn't exist
    if !ok {
        # Create the sitegroup
        sitegroup = &xsitegroup{ url: url, ids: []string{} }
        # Add it to the mapping
        sitegroups[url] = sitegroup
    }

    # Append the site id.   
    sitegroup.ids = append(sitegroup.ids, website["siteId"])
}