我的Go+语言初体验——Go+ 多种数据类型排序方法详解

Data-Mining 社区初级贡献者
2020年博客之星Top39
博客专家认证
2021-11-29 00:03:46

目录

前言

正文

基础规则排序

整型数据

字符串数据

浮点型数据

自定义规则排序

结尾


 

前言

Go+ 作为一种类似 Golang 的编程语言,最早是由七牛云提出的,此举填补了国人开发者在数据科学领域的空白。前后经过一年多时间的打磨,目前,Go+ 1.0 已于今年10月15日正式发布。目前,Go+ 1.0 已经能够工程化使用,而且语言的使用门槛进一步降低,更接近自然语言,1.0 的门槛甚至比 Python 更低,使得 Go+ 更适合 STEM 教育的场景。

正文

Go+ 的本意是希望融合工程开发的 Go、数据科学领域的 Python、编程教学领域的 Scratch,以 Python 之形结合 Go 之心,让工程师处理数据不需要学习新的开发语言,让初学者学习编程、开发作品的门槛更低。今天,我们就来详细介绍一下 Go+ 是如何处理不同数据类型的排序问题的。

Go+ 支持对切片和数组中的数据进行排序,使用的内置工具库是 sort 包,导入方式如下:

import (
    "sort"
)

接下来,我们就针对一般规则和自定规则的排序情况分别进行介绍。 

基础规则排序

整型数据

Go+ 利用 sort 包的 Ints 方法对整型数据进行升序排列。

示例代码:

import (
    "sort"
)

arr := [10, 2, 5, 67, 800, 49]
println("排序前:", arr)
sort.Ints(arr)
println("排序后:", arr)

执行结果:

排序前: [10 2 5 67 800 49]
排序后: [2 5 10 49 67 800]

亲自试一试!

另外,我们还可以使用 IntsAreSorted() 方法对切片或者数组进行判断,判断是否为升序排列。

示例代码:

import (
    "sort"
)

arr1 := [26, 11, 10]
res := sort.IntsAreSorted(arr1)
println("arr1 已经升序排列:", res)
arr2 := [1, 8, 119]
res = sort.IntsAreSorted(arr2)
println("arr2 已经升序排列:", res)

执行结果:

arr1 已经升序排列: false
arr2 已经升序排列: true

亲自试一试!

字符串数据

Go+ 利用 sort 包可以对字符串类型的数据进行升序排列,遇到相同字符时,顺位比对下一位。

示例代码:

import (
    "sort"
)

arr := ["a", "ab", "ac", "d", "dd", "xxxxxx", "hello", "world"]
println("排序前:", arr)
sort.Strings(arr)
println("排序后:", arr)

执行结果:

排序前: [a ab ac d dd xxxxxx hello world]
排序后: [a ab ac d dd hello world xxxxxx]

亲自试一试! 

浮点型数据

Go+ 利用 sort 包可以对浮点型数据进行升序排列。

示例代码:

import (
    "sort"
)

arr := [0.1, 1.2, 88.0, 3.1415926, 6.6]
println("排序前:", arr)
sort.Float64s(arr)
println("排序后:", arr)

执行结果:

排序前: [0.1 1.2 88 3.1415926 6.6]
排序后: [0.1 1.2 3.1415926 6.6 88]

亲自试一试! 

自定义规则排序

在实际开发过程,我们经常会遇到根据自身需要自定义排序规则的情况,下面我们就来介绍一下自定义排序方法如何实现。

如果想要实现自定义排序方法,首先需要实现 sort.Interface 的三个接口,分别是 Len,Less 和 Swap。三者的定义如下:

Len() int                // 排序集合长度的方法

Less(i, j int) bool   // i 位置和 j 位置元素的比较方法

Swap(i, j int)         // i 位置和 j 位置元素的替换方法

示例代码:

import (
    "sort"
)

type byLength []string

func (s byLength) Len() int {
    return len(s)
}
func (s byLength) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}
func (s byLength) Less(i, j int) bool {
    return len(s[i]) < len(s[j])
}

func main() {
    people := ["mom", "sister", "hi", "brother"]
    sort.Sort(byLength(people))
    println(people)
}

执行结果:

[hi mom sister brother]

亲自试一试!

结尾

好啦,今天关于 Go+ 如何处理不同数据类型的排序问题,以及常规排序方法和自定义排序方法的具体实现就介绍完了。感兴趣的小伙伴,可以自己动手试一试,正文中都给出了示例代码和在线测试链接。希望今天介绍的内容对想学习 Go+ 的小伙伴们有所帮助。

 

“我的Go+语言初体验” | 征文活动进行中......

 

...全文
438 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
Go+ 开发者社区

906

社区成员

Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。 Go+ 官网:https://goplus.org/
其他 企业社区
社区管理员
  • Go+
  • 杨东杰
加入社区
帖子事件
创建了帖子
2021-11-29 00:03
社区公告

本社区为 Go+ 官方开发者社区。我们希望向广大的开发者和数据科学家介绍 Go+ 的定位和意义,并邀请更多开发者一起贡献代码、共建 Go+ 生态。

Go+ 官网:https://goplus.org/
GitHub地址:https://github.com/goplus/gop