我有一个结构图,我通过将数据流传输到Go程序来填充.更新地图的方式与下面的示例类似.
一旦我填充了这个结构图,那么通过结构中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已经指出的那样,地图的元素没有排序,因此您无法对其进行排序.
您可以做的是创建切片并使用排序包对元素进行排序:
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,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}
编辑
更新了示例以使用指针并包含一个映射,以便您可以执行查找并使用切片进行排序.