如果我有一个像这样的结构:
type Foo struct {
title string
Tags map[string]string
}
Run Code Online (Sandbox Code Playgroud)
如何保持一套独特的结构?根据我的理解,虽然结构相等是一件事 - 地图平等不是.这意味着我无法比较我的上述结构.因此,我不能将地图实现为设置模式.
我能想到的两个可能有用的选项是:将标签转换为已排序[][]string或使用reflect.Deepequal.谁有更好的主意?
根据您正在执行的操作,一种选择可能是将结构存储为映射中的值而不是键。为此,您需要创建某种方法来从每个结构值生成唯一的键。
像这样的事情可能会起作用:
// Doesn't have to be a string: just has to be suitable for use as a map key.
func (foo *Foo) key() string {
return key_string
}
fooSet := make(map[string] *Foo)
// Store a Foo
fooSet[x.key()] = x
// Check if x is in the set:
if fooSet[x.key()] != nil {
println("x is in the set")
}
Run Code Online (Sandbox Code Playgroud)
它的工作效果如何取决于您为结构派生密钥的效率。
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |