Golang语言社区--结构体数据排序

大家好,我是Golang社区主编彬哥,这篇是给大家讲解关于复杂数据结构排序的。

结构体,数据排序

package main

import (
        "fmt"
        "sort"
        "strconv"
)

var testmap map[string]Person

type Person struct {
        Name string
        Age  int
        Sex  string
}

type ByAge []Person

func (a ByAge) Len() int      { return len(a) }
func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] }

//func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Less(i, j int) bool { return a[i].Age > a[j].Age } // 从大到小排序

func init() {
        testmap = make(map[string]Person)
        var testmap1 Person

        testmap1.Name = "John"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["3"] = testmap1

        testmap1.Name = "Bob1"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["0"] = testmap1

        testmap1.Name = "Bob"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["2"] = testmap1

        testmap1.Name = "John1"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["4"] = testmap1

        testmap1.Name = "John2"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["5"] = testmap1

        testmap1.Name = "John3"
        testmap1.Age = 31
        testmap1.Sex = "1"
        testmap["6"] = testmap1

}

func main() {
        fmt.Println(len(testmap))
        people := make([]Person, len(testmap))
        // 1 结构提取值获取数据 append
        for key, second := range testmap {
                ikey, _ := strconv.Atoi(key)
                fmt.Println(people) // 从0开始的
                people = append(people, people[ikey])
                people[ikey] = second
        }
        // 排序
        sort.Sort(ByAge(people))
        fmt.Println(people)
        // 获取数据值
        for key, second := range people {
                fmt.Println(key) // 从0开始的
                fmt.Println(second.Name)
                // 组合排名
        }

}

输出结果:

调试结果

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

希尔排序

希尔排序的时间复杂度,最好的情况下仍然是正序时,可达到O(n),平均复杂度为O(nlogn)。 算法思想: 采用跳跃式处理数组,使得数组粗粒度的实现基本有序。...

22150
来自专栏偏前端工程师的驿站

JS魔法堂:从void 0 === undefined说起

一、前言                                       当使用coffeescript书写如下代码时 name = person?...

20870
来自专栏木子昭的博客

Javascript常用API备忘录

Bom常见API 获取浏览器信息 var ua = navigator.userAgent if (ua.indexOf('Chrome')){ co...

32130
来自专栏debugeeker的专栏

用xerces-c来进行xml schema校验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

12610
来自专栏calmound

Where's Waldorf?

题意:找相同字符窜首字母的地址 读题。。。。A word matches a straight, uninterrupted line of letters i...

36880
来自专栏Linux驱动

28.C++- 单例类模板(详解)

单例类 描述 指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)  , 比如:统计在线人数 在单...

32540
来自专栏前端小叙

js操作DOM在父元素中的结尾添加子节点注意

所以js是不能直接传入字符串的,但是jquery的append可以直接传入html字符串。

19740
来自专栏Java 技术分享

JavaWeb 学习之 JSTL

471140
来自专栏GreenLeaves

JavaScript之insertBefore()和自定义insertAfter()的用法。

在JS图片库的第五版开发完后http://www.cnblogs.com/GreenLeaves/p/5691797.html#js_Five_Version我...

25190
来自专栏Pythonista

Golang实现一个密码生成器

21330

扫码关注云+社区

领取腾讯云代金券