[英]Set of structs containing a slice
我正在尝试实现玩具搜索算法,并且需要维护一组探索状态。 状态是一个结构:
type VWState struct {
botLocation VWCoords
dirtLocations []VWCoords
}
我的第一个想法是可以使用map[VWState]bool
实现一个简单的Set,但是我似乎还没有找到使它起作用的方法。 如果尝试使用VWState
作为地图的键, VWState
出现以下恐慌:
Panic: runtime error: hash of unhashable type vw.VWState (PC=0x40EB0D)
有没有办法使这项工作? 我可以为该结构实现自定义哈希函数,还是应该寻找其他实现此结构的方法?
任何帮助将不胜感激。
您可以将指向结构的指针用作映射键:
map[*VWState]bool
如果您希望能够比较等效的结构,则可以创建一种方法来输出地图的键。 String()
会很方便,因为您还可以使用它来打印您的结构,或者绑定一个哈希函数并输出更短的内容,甚至是一个int
。
尽管您可以根据需要将输出缩短(请注意不要在格式行中递归调用String()
,但这样的简单操作就足够了:
func (s VWState) String() string {
return fmt.Sprintf("%#v", s)
}
func main() {
m := make(map[string]bool)
s := VWState{}
m[s.String()] = true
}
如果dirtLocations
有合理的最大长度,则可以使用数组而不是切片。 数组是可哈希的(假设元素是可哈希的)。
type VWState struct {
botLocation VWCoords
dirtLocations [4]VWCoords
}
然后,您需要添加有效dirtLocations
数量的dirtLocations
或检测dirtLocations
的零值来VWCoords
dirtLocations
有多少个插槽有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.