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 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LintCode 合并排序数组 II题目代码

合并两个排序的整数数组A和B变成一个新的数组。 注意事项 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。

432
来自专栏King_3的技术专栏

leetcode-643-Maximum Average Subarray I

962
来自专栏swag code

Master Method Restated-主项定理-递归时间复杂度

比较n^log b (a)与Θ(h(n)) 的大小(Θ的含义和“等于”类似,而大O的含义和“小于等于”类似,感觉好像这里都可以用):

712
来自专栏武培轩的专栏

Leetcode#88. Merge Sorted Array(合并两个有序数组)

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。

862
来自专栏racaljk

Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)

这道题的corner cases非常多,请务必确保下面cases都能通过的情况下再提交。

1023
来自专栏编程理解

排序算法(二):选择排序

选择排序算法维护一个待排序集合和一个已排序集合,每轮迭代,从待排序集合中选择一个最小(最大)元素,添加到已排序集合中,通过多次迭代,最终完成排序。

601
来自专栏King_3的技术专栏

leetcode-766-Toeplitz Matrix(每一条对角线元素的比较)

2275
来自专栏calmound

HDU 1503 Advanced Fruits

题意:将两个单词合并,重复的部分只输出一次。 分析:最长递增子序列的变形,只是输出的地方发生了变化 #include<stdio.h> #include<str...

2634
来自专栏Petrichor的专栏

leetcode: 45. Jump Game II

993
来自专栏前端儿

比较字母大小

任意给出两个英文字母,比较它们的大小,规定26个英文字母A,B,C.....Z依次从大到小。

490

扫码关注云+社区