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条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog