我想用时间戳标记我的 map ,会有各种 map - 动态生成。键将被重复,所以如果出现相同的 map ,我想更新它的值
我从外部来源获取 map ,并希望在阅读时注册
我经常想迭代 map 并找到那些有一段时间没有更新的 map
a = map[string]string{"a":1, "b":2}
b = map[map[string]string]time.Time{}
b[a] = 1
我知道它不受支持,但我想知道有哪些方法可以做到这一点?
首先想到的是:将map序列化为字符串,作为key,,?
最佳答案
制作一个结构来保留您需要的信息:
type MyMap struct {
timestamp time.Time
m map[string]string
}
并通过遍历这样的结构 slice 进行查找:
func lookup(needle map[string]string, haystack []MyMap) (MyMap, bool) {
for _, myMap := range haystack {
if reflect.DeepEqual(needle, myMap.m) {
return myMap, true
}
}
return nil, false
}
或者,将您的 map 转换为 JSON 并将结果用作键:
b, _ := json.Marshal(myMap)
key := string(b)
m, ok := myMaps[key] // myMaps is map[string]MyMap
if !ok {
myMaps[key] = myMap
}
显然,
json.Marshal
在编码之前对 map 的键进行排序,所以这应该是一个可靠的解决方案。
关于go - 在 GO 中使用 map 作为 map 键的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61848322/