
我从数据库中查到了一些数据,最后组装了一个 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 年就够了。 |