Golang Go语言中如何获取我想要的数据结构,map不灵活怎么办

发布于 1周前 作者 htzhanglong 来自 Go语言

Golang Go语言中如何获取我想要的数据结构,map不灵活怎么办

我从数据库中查到了一些数据,最后组装了一个 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,或者是其他顺序。


更多关于Golang Go语言中如何获取我想要的数据结构,map不灵活怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

26 回复

map 是没有顺序的,剩下的没看懂

更多关于Golang Go语言中如何获取我想要的数据结构,map不灵活怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你需要 ordered_map

你以前是写啥的……
把 key 拿出来排个序,或者找找有没有 ordermap,或者改用数组

map 中的 key 值是年,例如 2019、2018、2017 这样的,最后想要的数据是从大到小排序的数据结构,但是 key 依旧还是年

这不用问,一猜就是 php,哈哈

map 无序的,另外.处理嵌套的数据结构的时候,那才是真的各种麻烦

map 应该不能实现这个功能,只能用 slice 辅助

没有
hashmap 无序是比较常规的设计.很多语言都提供了有序 map,不过出镜率也不高
这个需求我也推荐自己维护顺序,循环两次输出.

可能就是 go 的一种设计思想吧,也许以后会补上很多缺少的东西,现在来看,内置库还有很多可以加的东西.

想过用那个,但是得到数据结构不是想要的,之前用 php 的数组得到的数据结构是一个多维数组,类似于
[
‘2019’ => [
[
‘title’ => ‘哈哈哈’,
‘time’ => ‘2019-06’
],
[
‘title’ => ‘啦啦啦’,
‘time’ => ‘2019-05’
],
],
‘2018’ => [
[
‘title’ => ‘嘎嘎嘎’,
‘time’ => ‘2018-06’
],
[
‘title’ => ‘噜噜噜’,
‘time’ => ‘2017-05’
],
],
]

#9 这个可以实现呀 make([]map[string]interface{}, 0),不过最好 interface 换成具体的 struct

我最后获取到的是按照年份正序的,如何换为倒序的

定义一个 map 的别名类型,实现 sort 接口

明天做做,做不出来了再问你

开个长度为 3000 的数组或者切片,下标表示年份,:)

???长度为 3000 ?

哈哈,高就是高,反正能解决问题,666

数据结构是能实现,我用的就是你说的这个思路,关键是那个按照年费的排序,总是按照年份正序,而不是倒序

推荐一个我常用的库 gubrak

<br>import "<a target="_blank" href="http://github.com/novalagung/gubrak" rel="nofollow noopener">github.com/novalagung/gubrak</a>"<br><br>type HashMap map[string]string<br><br>data := []HashMap{<br> {"name": "grayson", "hobby": "helping people"},<br> {"name": "jason", "hobby": "punching people"},<br> {"name": "tim", "hobby": "stay awake all the time"},<br> {"name": "damian", "hobby": "getting angry"},<br>}<br><br>result, err := gubrak.KeyBy(data, func(each HashMap) string {<br> return each["name"]<br>})<br>if err != nil {<br> log.Fatal(err.Error())<br>}<br><br>fmt.Println(result)<br>/*<br> map[string]main.HashMap {<br> "grayson": main.HashMap{ "hobby": "helping people", "name": "grayson" },<br> "jason": main.HashMap{ "name": "jason", "hobby": "punching people" },<br> "tim": main.HashMap{ "name": "tim", "hobby": "stay awake all the time" },<br> "damian": main.HashMap{ "name": "damian", "hobby": "getting angry" },<br> }<br>*/<br>

建议使用数组 struct,感觉你的格式是同统一的

go<br>type bar struct{<br>time int<br>title string<br>}<br>var foo []bar<br><br>...<br><br>

gorm 的数据库 order 其实就是这么做的

这样的数据结构不是我预期的数据结构,我预期的数据结构是以年为 key,以[]为 value 的一个变量,按照你的做法做,我没办法以年为 key

你应该用结构体构建每一个项目,然后把这些项目整合进一个数组之类的或者别的数据结构里,方便查找。

我想要的那种数据结构能实现不,并且保证排序也是我想要的

3000 只是个保险数字,实际上 200 年就够了。

在Go语言中,获取你想要的数据结构通常依赖于对语言特性的深入理解以及适当的数据结构设计。map 是 Go 中非常强大且常用的数据结构,用于存储键值对。但如果你发现 map 在某些场景下不够灵活,可以考虑以下几种替代或补充方案:

  1. 结构体(Struct):对于具有固定字段的数据,结构体提供了更好的类型安全和可读性。你可以定义一个结构体类型,并创建该类型的变量来存储数据。

  2. 切片(Slice):当你需要存储一组数据且数据量可能会变化时,切片是一个很好的选择。你可以将切片作为字段嵌入到结构体中,以实现更复杂的数据结构。

  3. 接口(Interface):使用接口可以定义一组方法签名,任何实现了这些方法的类型都可以被视为该接口的实现。这提供了一种灵活的方式来处理不同类型的数据。

  4. 嵌套结构:你可以将 map、切片或结构体嵌套使用,以构建更复杂的数据结构。例如,一个 map 的值可以是另一个 map 或切片,甚至是一个结构体。

  5. 第三方库:Go 社区提供了许多第三方库,这些库可能包含了你需要的数据结构或更高级的抽象。

总之,Go 语言提供了多种工具和机制来构建灵活且高效的数据结构。当你发现 map 不满足需求时,可以尝试上述替代方案或结合使用它们来构建更适合你应用场景的数据结构。

回到顶部