我在下面第 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_1T00 213434T01 23432T02 3324T03 324T04 324T05 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 并添加新键和增量。
1 回答
慕哥6287543
TA贡献1831条经验 获得超10个赞
错误来自
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]++
这相当于:
# Python
data.setdefault(taghash, {}).setdefault(hour, 0) += 1
或者
if taghash not in data:
data[taghash] = {}
if hour not in data[taghash]:
data[taghash][hour] = 1
else:
data[taghash][hour] += 1
- 1 回答
- 0 关注
- 187 浏览
添加回答
举报
0/150
提交
取消