gpt4 book ai didi

对结构图进行排序 - GOLANG

转载 作者:IT老高 更新时间:2023-10-28 13:08:42 26 4
gpt4 key购买 nike

我有一个结构映射,我通过将数据流式传输到 Go 程序来填充这些结构。更新 map 的方式类似于下面的示例。

一旦我填充了这个结构映射,按照结构中 count 字段的值对该映射进行排序的最佳(或好)方法是什么?

package main

type data struct {
count int64
}

func main() {
m := make(map[string]data)
m["x"] = data{0, 0}
if xx, ok := m["x"]; ok {
xx.count = 2
m["x"] = xx
} else {
panic("X isn't in the map")
}
}

这个例子可以在这里运行:http://play.golang.org/p/OawL6QIXuO

最佳答案

正如 siritinga 已经指出的那样,map 的元素没有排序,因此您无法对其进行排序。

您可以做的是创建一个 slice 并使用 sort 包对元素进行排序:

package main

import (
"fmt"
"sort"
)

type dataSlice []*data

type data struct {
count int64
size int64
}

// Len is part of sort.Interface.
func (d dataSlice) Len() int {
return len(d)
}

// Swap is part of sort.Interface.
func (d dataSlice) Swap(i, j int) {
d[i], d[j] = d[j], d[i]
}

// Less is part of sort.Interface. We use count as the value to sort by
func (d dataSlice) Less(i, j int) bool {
return d[i].count < d[j].count
}

func main() {
m := map[string]*data {
"x": {0, 0},
"y": {2, 9},
"z": {1, 7},
}

s := make(dataSlice, 0, len(m))

for _, d := range m {
s = append(s, d)
}

// We just add 3 to one of our structs
d := m["x"]
d.count += 3

sort.Sort(s)

for _, d := range s {
fmt.Printf("%+v\n", *d)
}
}

输出:

{count:1 size:7}
{count:2 size:9}
{count:3 size:0}

Playground

编辑

更新了示例以使用指针并包含一个映射,以便您既可以进行查找又可以对 slice 进行排序。

关于对结构图进行排序 - GOLANG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19946992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com