我有一个导航栏作为地图:
var navbar = map[string]navbarTab{ }
其中navbarTab具有各种属性,子项等。当我尝试渲染导航栏(带有for tabKey := range navbar)时,它以随机顺序显示。我知道range它在运行时会随机排序,但是似乎无法获取有序的键列表或按插入顺序进行迭代。
navbarTab
for tabKey := range navbar
range
游乐场链接位于此处:http : //play.golang.org/p/nSL1zhadg5,尽管它似乎没有表现出相同的行为。
如何在不破坏插入顺序的情况下迭代此映射?
Go地图不保持插入顺序;您将必须自己实现此行为。
例:
type NavigationMap struct { m map[string]navbarTab keys []string } func NewNavigationMap() *NavigationMap { ... } func (n *NavigationMap) Set(k string, v navbarTab) { n.m[k] = v n.keys = append(n.keys, k) }
本示例不完整,并且未涵盖所有用例(例如,更新重复键上的插入顺序)。
如果您的用例包括多次重新插入相同的键(如果键 k 已在映射中,则不会更新键 k的 插入顺序):
func (n *NavigationMap) Set(k string, v navbarTab) { _, present := n.m[k] n.m[k] = v if !present { n.keys = append(n.keys, k) } }
选择满足您要求的最简单的方法。