The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
wo642436249

刚实际接触不久 go, golang 如何获取我想要的数据结构,发现 map 并不是那么灵活,可能我知道的太少了,如正文

  •  
  •   wo642436249 · Jul 4, 2019 · 5430 views
    This topic created in 2680 days ago, the information mentioned may be changed or developed.

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

    25 replies  •  2019-07-06 03:41:56 +08:00
    haozibi
    haozibi
    Jul 4, 2019
    1
    map 是没有顺序的,剩下的没看懂
    raynor2011
    raynor2011
    Jul 4, 2019 via Android
    2
    你需要 ordered_map
    whileFalse
    whileFalse
    Jul 4, 2019 via iPhone
    3
    你以前是写啥的……
    把 key 拿出来排个序,或者找找有没有 ordermap,或者改用数组
    wo642436249
    wo642436249
    OP
    Jul 4, 2019
    4
    @haozibi map 中的 key 值是年,例如 2019、2018、2017 这样的,最后想要的数据是从大到小排序的数据结构,但是 key 依旧还是年
    wo642436249
    wo642436249
    OP
    Jul 4, 2019
    5
    @whileFalse 这不用问,一猜就是 php,哈哈
    qq976739120
    qq976739120
    Jul 4, 2019
    6
    map 无序的,另外.处理嵌套的数据结构的时候,那才是真的各种麻烦
    haozibi
    haozibi
    Jul 4, 2019
    7
    map 应该不能实现这个功能,只能用 slice 辅助
    Vegetable
    Vegetable
    Jul 4, 2019
    8
    没有
    hashmap 无序是比较常规的设计.很多语言都提供了有序 map,不过出镜率也不高
    这个需求我也推荐自己维护顺序,循环两次输出.

    可能就是 go 的一种设计思想吧,也许以后会补上很多缺少的东西,现在来看,内置库还有很多可以加的东西.
    wo642436249
    wo642436249
    OP
    Jul 4, 2019
    9
    @haozibi 想过用那个,但是得到数据结构不是想要的,之前用 php 的数组得到的数据结构是一个多维数组,类似于
    [
    '2019' => [
    [
    'title' => '哈哈哈',
    'time' => '2019-06'
    ],
    [
    'title' => '啦啦啦',
    'time' => '2019-05'
    ],
    ],
    '2018' => [
    [
    'title' => '嘎嘎嘎',
    'time' => '2018-06'
    ],
    [
    'title' => '噜噜噜',
    'time' => '2017-05'
    ],
    ],
    ]
    haozibi
    haozibi
    Jul 4, 2019
    10
    @wo642436249 #9 这个可以实现呀 `make([]map[string]interface{}, 0)`,不过最好 interface 换成具体的 struct
    wo642436249
    wo642436249
    OP
    Jul 4, 2019 via Android
    11
    我最后获取到的是按照年份正序的,如何换为倒序的
    dic
    dic
    Jul 4, 2019 via Android
    12
    定义一个 map 的别名类型,实现 sort 接口
    wo642436249
    wo642436249
    OP
    Jul 4, 2019 via Android
    13
    @dic 明天做做,做不出来了再问你
    liulaomo
    liulaomo
    Jul 4, 2019
    14
    开个长度为 3000 的数组或者切片,下标表示年份,:)
    jinliming2
    jinliming2
    Jul 5, 2019 via iPhone
    15
    @liulaomo ???长度为 3000 ?
    wo642436249
    wo642436249
    OP
    Jul 5, 2019
    16
    @liulaomo 哈哈,高就是高,反正能解决问题,666
    wo642436249
    wo642436249
    OP
    Jul 5, 2019
    17
    @haozibi 数据结构是能实现,我用的就是你说的这个思路,关键是那个按照年费的排序,总是按照年份正序,而不是倒序
    leopku
    leopku
    Jul 5, 2019
    18
    推荐一个我常用的库 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" },
    }
    */
    ```
    aimerforreimu
    aimerforreimu
    Jul 5, 2019
    19
    建议使用数组 struct,感觉你的格式是同统一的

    ```go
    type bar struct{
    time int
    title string
    }
    var foo []bar

    ...

    ```
    aimerforreimu
    aimerforreimu
    Jul 5, 2019
    20
    gorm 的数据库 order 其实就是这么做的
    wo642436249
    wo642436249
    OP
    Jul 5, 2019
    21
    @aimerforreimu 这样的数据结构不是我预期的数据结构,我预期的数据结构是以年为 key,以[]为 value 的一个变量,按照你的做法做,我没办法以年为 key
    Hanggi
    Hanggi
    Jul 5, 2019
    22
    你应该用结构体构建每一个项目,然后把这些项目整合进一个数组之类的或者别的数据结构里,方便查找。
    wo642436249
    wo642436249
    OP
    Jul 5, 2019
    23
    @Hanggi 我想要的那种数据结构能实现不,并且保证排序也是我想要的
    daemonk
    daemonk
    Jul 5, 2019
    24
    TreeMap
    liulaomo
    liulaomo
    Jul 6, 2019
    25
    @jinliming2 3000 只是个保险数字,实际上 200 年就够了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3095 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 11:11 · PVG 19:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.