ZBLOG

golang map类型转切片,保证顺序不变

在Go语言中,map类型是无序的,因此如果想将map类型转换为切片,并且保证顺序不变,需要进行以下操作:

  1. 定义一个结构体类型,包含key和value两个字段。
  2. 遍历map类型,将其转换为结构体切片。
  3. 对结构体切片按照key进行排序。
  4. 遍历排序后的结构体切片,提取其中的value值,并添加到新的切片中。

下面是示例代码:

type KeyValue struct {
    Key   string
    Value int
}

func mapToSlice(m map[string]int) []int {
    var kvs []KeyValue
    for k, v := range m {
        kvs = append(kvs, KeyValue{k, v})
    }
    sort.Slice(kvs, func(i, j int) bool { return kvs[i].Key < kvs[j].Key })

    var result []int
    for _, kv := range kvs {
        result = append(result, kv.Value)
    }
    return result
}

使用示例:

m := map[string]int{"a": 3, "c": 1, "b": 2}
s := mapToSlice(m)
fmt.Println(s) // [3 2 1]

以上代码中,mapToSlice函数接收一个字符串到整数映射的map参数,并返回整数切片。函数内部首先将map转换为KeyValue类型的结构体切片kvs,并对其按照键值key进行排序。最后遍历kvs并提取其中的value值,添加到新的整数切片result中,并返回result。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=4908

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?