v1=某物; 它->v2=某物; },map,iterator,go,specifications,Map,Iterator,Go,Specifications" /> v1=某物; 它->v2=某物; },map,iterator,go,specifications,Map,Iterator,Go,Specifications" />

Go是否有迭代器数据类型? 我如何编写GO代码,可以像C++中的map迭代器那样做? typedef std::map<std::string, MyStruct> MyMap; MyMap::iterator it = myMap.find("key"); if(it!=myMap.end()) { it->v1 = something; it->v2 = something; } typedef std::map MyMap; 迭代器it=MyMap.find(“key”); if(it!=myMap.end()){ 它->v1=某物; 它->v2=某物; }

Go是否有迭代器数据类型? 我如何编写GO代码,可以像C++中的map迭代器那样做? typedef std::map<std::string, MyStruct> MyMap; MyMap::iterator it = myMap.find("key"); if(it!=myMap.end()) { it->v1 = something; it->v2 = something; } typedef std::map MyMap; 迭代器it=MyMap.find(“key”); if(it!=myMap.end()){ 它->v1=某物; 它->v2=某物; },map,iterator,go,specifications,Map,Iterator,Go,Specifications,例如 package main import "fmt" type MyStruct struct { v1 string v2 int } type MyMap map[string]MyStruct func main() { m := MyMap{ "unum": MyStruct{"I", 1}, "duo": MyStruct{"II", 2}, } fmt.Println("before:")

例如

package main

import "fmt"

type MyStruct struct {
    v1 string
    v2 int
}

type MyMap map[string]MyStruct

func main() {
    m := MyMap{
        "unum": MyStruct{"I", 1},
        "duo":  MyStruct{"II", 2},
    }
    fmt.Println("before:")
    for k, v := range m {
        fmt.Println(k, v)
    }
    var k string
    k = "unum"
    if v, ok := m[k]; ok {
        v.v1 = "one"
        v.v2 = 1
        m[k] = v
    }
    k = "tria"
    if v, ok := m[k]; ok {
        v.v1 = "III"
        v.v2 = 3
        m[k] = v
    }
    fmt.Println("after:")
    for k, v := range m {
        fmt.Println(k, v)
    }
}
输出:

before:
unum {I 1}
duo {II 2}
after:
unum {one 1}
duo {II 2}

在go中,使用range子句在映射上进行迭代非常容易

myMap := map[string]int {"one":1, "two":2}

for key, value := range myMap {
  // Do something.
  fmt.Println(key, value)
}
可以打印

one 1
two 2
请注意,您在映射上以未定义的顺序进行迭代,因为它是由哈希表而不是树支持的


go描述了range子句返回的内容,您可以在页面上查看更多示例。

如果您只是试图在映射中查找键,请使用以下命令:

package main

import (
    "fmt"
)

type Point struct {
    x, y int
}

func main() {
    points := make(map[string]*Point)

    p := &Point{1, 1}
    points["one"] = p

    if p1, found := points["one"]; found {
        p1.x = 100
    }

    fmt.Println(p)
}

您是否试图迭代一个具有对值的写访问的映射?在GO中没有迭代器数据类型,并且不应该尝试在Co中写入C++,而是只想想做什么,并将GO的特性应用到手头的任务中。这就是为什么lazy1的答案可能是正确的,但是您想要实现什么并不完全清楚。我知道这些代码可以工作。但我认为它比C++慢。因为它有两次搜索算法。戈朗有“C++的数据类型”或“迭代器数据类型”吗?如果它回答了你的问题,请接受它:(如果没有,请澄清,我会尽力帮助!)