我从数据库中查到了一些数据,最后组装了一个 map,这是 map 数据: [2016:[{{19}鹰眼 (美国漫威漫画旗下超级英雄) 1461602767}] 2019:[{{18}蜘蛛侠 1561602685} {{16}美国队长 (美国漫威漫画旗下超级英雄) 1561518720} {{15}黑寡妇 (美国漫威漫画旗下超级英雄) 1561518360} {{14}复仇者联盟 1561511786} {{12}钢铁侠( Iron Man ) 1561427220}]] 其中 key 是 2016 和 2019 可能会有 2018 和 2017,最终我想要的是从 2019 到 2018 到 2017 到 2016,而不是 2016 到 2017 到 2018 到 2019,或者是其他顺序。
1
haozibi 2019-07-04 17:27:46 +08:00
map 是没有顺序的,剩下的没看懂
|
2
raynor2011 2019-07-04 17:28:30 +08:00 via Android
你需要 ordered_map
|
3
whileFalse 2019-07-04 17:29:26 +08:00 via iPhone
你以前是写啥的……
把 key 拿出来排个序,或者找找有没有 ordermap,或者改用数组 |
4
wo642436249 OP @haozibi map 中的 key 值是年,例如 2019、2018、2017 这样的,最后想要的数据是从大到小排序的数据结构,但是 key 依旧还是年
|
5
wo642436249 OP @whileFalse 这不用问,一猜就是 php,哈哈
|
6
qq976739120 2019-07-04 17:33:09 +08:00
map 无序的,另外.处理嵌套的数据结构的时候,那才是真的各种麻烦
|
7
haozibi 2019-07-04 17:36:47 +08:00
map 应该不能实现这个功能,只能用 slice 辅助
|
8
Vegetable 2019-07-04 17:37:26 +08:00
没有
hashmap 无序是比较常规的设计.很多语言都提供了有序 map,不过出镜率也不高 这个需求我也推荐自己维护顺序,循环两次输出. 可能就是 go 的一种设计思想吧,也许以后会补上很多缺少的东西,现在来看,内置库还有很多可以加的东西. |
9
wo642436249 OP @haozibi 想过用那个,但是得到数据结构不是想要的,之前用 php 的数组得到的数据结构是一个多维数组,类似于
[ '2019' => [ [ 'title' => '哈哈哈', 'time' => '2019-06' ], [ 'title' => '啦啦啦', 'time' => '2019-05' ], ], '2018' => [ [ 'title' => '嘎嘎嘎', 'time' => '2018-06' ], [ 'title' => '噜噜噜', 'time' => '2017-05' ], ], ] |
10
haozibi 2019-07-04 17:47:07 +08:00
@wo642436249 #9 这个可以实现呀 `make([]map[string]interface{}, 0)`,不过最好 interface 换成具体的 struct
|
11
wo642436249 OP 我最后获取到的是按照年份正序的,如何换为倒序的
|
12
dic 2019-07-04 20:20:38 +08:00 via Android
定义一个 map 的别名类型,实现 sort 接口
|
13
wo642436249 OP @dic 明天做做,做不出来了再问你
|
14
liulaomo 2019-07-04 22:24:57 +08:00
开个长度为 3000 的数组或者切片,下标表示年份,:)
|
15
jinliming2 2019-07-05 08:09:58 +08:00 via iPhone
@liulaomo ???长度为 3000 ?
|
16
wo642436249 OP @liulaomo 哈哈,高就是高,反正能解决问题,666
|
17
wo642436249 OP @haozibi 数据结构是能实现,我用的就是你说的这个思路,关键是那个按照年费的排序,总是按照年份正序,而不是倒序
|
18
leopku 2019-07-05 08:58:37 +08:00
推荐一个我常用的库 gubrak
``` import "github.com/novalagung/gubrak" type HashMap map[string]string data := []HashMap{ {"name": "grayson", "hobby": "helping people"}, {"name": "jason", "hobby": "punching people"}, {"name": "tim", "hobby": "stay awake all the time"}, {"name": "damian", "hobby": "getting angry"}, } result, err := gubrak.KeyBy(data, func(each HashMap) string { return each["name"] }) if err != nil { log.Fatal(err.Error()) } fmt.Println(result) /* map[string]main.HashMap { "grayson": main.HashMap{ "hobby": "helping people", "name": "grayson" }, "jason": main.HashMap{ "name": "jason", "hobby": "punching people" }, "tim": main.HashMap{ "name": "tim", "hobby": "stay awake all the time" }, "damian": main.HashMap{ "name": "damian", "hobby": "getting angry" }, } */ ``` |
19
aimerforreimu 2019-07-05 09:24:07 +08:00
建议使用数组 struct,感觉你的格式是同统一的
```go type bar struct{ time int title string } var foo []bar ... ``` |
20
aimerforreimu 2019-07-05 09:24:42 +08:00
gorm 的数据库 order 其实就是这么做的
|
21
wo642436249 OP @aimerforreimu 这样的数据结构不是我预期的数据结构,我预期的数据结构是以年为 key,以[]为 value 的一个变量,按照你的做法做,我没办法以年为 key
|
22
Hanggi 2019-07-05 12:06:26 +08:00
你应该用结构体构建每一个项目,然后把这些项目整合进一个数组之类的或者别的数据结构里,方便查找。
|
23
wo642436249 OP @Hanggi 我想要的那种数据结构能实现不,并且保证排序也是我想要的
|
24
daemonk 2019-07-05 15:39:59 +08:00
TreeMap
|
25
liulaomo 2019-07-06 03:41:56 +08:00
@jinliming2 3000 只是个保险数字,实际上 200 年就够了。
|