请看下面我的地图
var romanNumeralDict map[int]string = map[int]string{
1000: "M",
900 : "CM",
500 : "D",
400 : "CD",
100 : "C",
90 : "XC",
50 : "L",
40 : "XL",
10 : "X",
9 : "IX",
5 : "V",
4 : "IV",
1 : "I",
}
Run Code Online (Sandbox Code Playgroud)
我希望按照键的大小顺序遍历此映射
for k, v := range romanNumeralDict {
fmt.Println("k:", k, "v:", v)
}
Run Code Online (Sandbox Code Playgroud)
然而,这打印出来
k: 1000 v: M
k: 40 v: XL
k: 5 v: V
k: 4 v: IV
k: 900 v: CM
k: …Run Code Online (Sandbox Code Playgroud) 我有一个导航栏作为地图:
var navbar = map[string]navbarTab{
}
Run Code Online (Sandbox Code Playgroud)
哪里navbarTab有各种属性,儿童用品等.当我尝试渲染导航栏(带for tabKey := range navbar)时,它以随机顺序显示.我知道range它在运行时会随机排序,但似乎无法获得有序的键列表或迭代插入顺序.
游乐场链接在这里:http://play.golang.org/p/nSL1zhadg5虽然它似乎没有表现出相同的行为.
如何在不破坏插入顺序的情况下迭代此地图?
为什么地图打印乱序,如何按顺序打印?
package main
import (
"fmt"
)
type monthsType struct {
no int
text string
}
var months = map[int]string{
1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",
7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",
}
func main(){
for no, month := range months {
fmt.Print(no)
fmt.Println("-" + month)
}
}
Run Code Online (Sandbox Code Playgroud)
打印出来:
10-October
7-July
1-January
9-September
4-April
5-May
2-Fabruary
12-December
11-Novenber
6-June
8-August
3-March
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种确定Go map的有序范围.
Golang规范说明如下:
未指定地图上的迭代顺序,并且不保证从一次迭代到下一次迭代是相同的.如果在迭代期间删除了尚未到达的映射条目,则不会生成相应的迭代值.如果在迭代期间创建了映射条目,则可以在迭代期间生成该条目,或者可以跳过该条目.对于创建的每个条目以及从一次迭代到下一次迭代,选择可能不同.如果映射为nil,则迭代次数为0.
我在StackOverflow和Google上找到的所有内容都是(imho)我不喜欢的解决方法.
有没有一种可靠的方法来迭代地图并按照它们插入的顺序检索项目?
我发现的解决方案是:
在两个单独的切片中跟踪键和值:听起来像"不要使用地图",失去了使用地图的所有优点.
使用映射但跟踪不同切片中的密钥:这意味着数据重复可能导致数据不对齐,并最终可能带来大量错误和痛苦的调试.
你有什么建议?
编辑以响应可能的重复标记.
我的问题和提供的问题(这个问题,但也是这个问题)之间存在细微的差别,这两个问题都要求在按键字典顺序之后循环遍历地图; 相反,我特别问过:
有没有一种可靠的方法来迭代地图并按照它们插入的顺序检索项目?
这不是词典,因此不同于@gramme.ninja问题:
如何让键按顺序/排序地图,以便键按顺序排列并且值对应?
我是golang的新手,我想在这样的地图中反转对的出现顺序,以便最后一对出现:
mapA := map[string]int {
"cat": 5,
"dog": 2,
"fish": 3 ,
}
fmt.Println(mapA)
map[cat:5 dog:2 fish:3]
Run Code Online (Sandbox Code Playgroud)
生成的地图应该像:
map[fish:3 dog:2 cat:5]
Run Code Online (Sandbox Code Playgroud)
它可以是具有相同项目但是顺序的新mapB.
我怎样才能做到这一点?