嵌套字典 Golang 问题

我在下面第 167 行部分开始时遇到问题的区域:


for scanner.Scan() {

        //dateCollection := make(map[string]int)

        m := tag.FindString(scanner.Text())

        if m != "" {

            // stop races

            Lock.Lock()

            arr := strings.Split(m, "/")

            taghash := strings.Join(arr, "_")

            taghash = strings.TrimLeft(taghash, "_")

            //data[taghash]++

            m = date.FindString(scanner.Text())

            if m != "" {

                hour := m

                data[taghash] = make(map[string]int)

                data[taghash][hour]++

            }

            Lock.Unlock()

        }

    }

    fmt.Println(file)

    os.Remove(file)

    if err := scanner.Err(); err != nil {

        log.Fatal(err)

    }

我在主函数中打印值时得到的输出


fstvt1_ros_300x600_pp8_1 T07 1

我期待一个看起来像这样的输出:


fstvt1_ros_300x600_pp8_1

T00 213434

T01 23432

T02 3324

T03 324

T04 324

T05 0 ...

(this isn't real data)

我想要做的是: 我有一个数据映射,var data = make(map[string]map[string]int)其键等于 taghash,例如fstvt1_ros_300x600_pp8_1. 该值是数据映射。该映射的键值应为字符串和整数。我想要多张地图。每个键一个... T01, T02 .. 当前输出的是我正在迭代的最后一个项目中的最后一个项目,而不是每个标签哈希的键和值的集合。我如何制作,而不是覆盖数据,而是添加新的键值 T01、T02 .. 并且如果 taghash 和小时是增加该特定对象的一些。


我目前使用的代码行:


T01, T02..


data[taghash][hour]++

如果 taghash 和小时存在,那么它应该增加。如果 taghash 和 hour 不存在,则创建 taghash 并添加新键和增量。


泛舟湖上清波郎朗
浏览 188回答 1
1回答

慕哥6287543

错误来自data[taghash] = make(map[string]int)data[taghash]每次通过时,这都会设置为新分配的地图。这绝对不是你想要做的。反而:if _, ok := data[taghash]; !ok {    // data[taghash] does not exist -- create it!    data[taghash] := make(map[string]int)}data[taghash][hour]++这相当于:# Pythondata.setdefault(taghash, {}).setdefault(hour, 0) += 1或者if taghash not in data:    data[taghash] = {}if hour not in data[taghash]:    data[taghash][hour] = 1else:    data[taghash][hour] += 1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go