douqie1852 2013-03-15 01:20
浏览 31
已采纳

如何使用struct替代地图?

I read "An introduction to programming in GO" by Caleb Doxsey. In chapter 6 he had the following example:

package main

import "fmt"

func main() {
    elements := map[string]map[string]string{
        "H": map[string]string{
            "name":  "Hydrogen",
            "state": "gas",
        },
        "He": map[string]string{
            "name":  "Helium",
            "state": "gas",
        },
        "Li": map[string]string{
            "name":  "Lithium",
            "state": "solid",
        },
        "Be": map[string]string{
            "name":  "Beryllium",
            "state": "solid",
        },
        "B": map[string]string{
            "name":  "Boron",
            "state": "solid",
        },
        "C": map[string]string{
            "name":  "Carbon",
            "state": "solid",
        },
        "N": map[string]string{
            "name":  "Nitrogen",
            "state": "gas",
        },
        "O": map[string]string{
            "name":  "Oxygen",
            "state": "gas",
        },
        "F": map[string]string{
            "name":  "Fluorine",
            "state": "gas",
        },
        "Ne": map[string]string{
            "name":  "Neon",
            "state": "gas",
        },
    }

    if el, ok := elements["Li"]; ok {
        fmt.Println(el["name"], el["state"])
    }
}

He commented the example that "although maps are often used like this, in chapter 9 we will see a better way to store structured information." Chapter 9 is about Structs and Interfaces.

What does a better way to store structured information with structs and interfaces look like for the example above?

Thank you in advance.

  • 写回答

2条回答 默认 最新

  • dongmeng4742 2013-03-15 01:46
    关注
    type element struct {
        name  string
        state string
    }
    
    func main() {
        elements := map[string]element{
            "H":  {"Hydrogen", "gas"},
            "He": {"Helium", "gas"},
            "Li": {"Lithium", "solid"},
            "Be": {"Beryllium", "solid"},
            "B":  {"Boron", "solid"},
            "C":  {"Carbon", "solid"},
            "N":  {"Nitrogen", "gas"},
            "O":  {"Oxygen", "gas"},
            "F":  {"Fluorine", "gas"},
            "Ne": {"Neon", "gas"},
        }
        if el, ok := elements["Li"]; ok {
            fmt.Println(el.name, el.state)
        }
    }
    

    http://play.golang.org/p/vIbA5Qs7SD

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行