无涯教程-Go - 排序

35 阅读1分钟

Go具有排序包,可用于对内置以及用户定义的数据类型进行排序。

sort包具有不同的方法来对不同的数据类型进行排序,例如Ints(),Float64s(),Strings()等。

我们可以使用AreSorted()方法(例如Float64sAreSorted(),IntsAreSorted()等)来检查值是否已排序。

Go排序示例

package main
import (
	"sort"
	"fmt"
)
func main() {
intValue </span><span class="pun">:=</span><span class="pln"> </span><span class="pun">[]</span><span class="kwd">int</span><span class="pun">{</span><span class="lit">10</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">}</span><span class="pln">
sort</span><span class="pun">.</span><span class="typ">Ints</span><span class="pun">(</span><span class="pln">intValue</span><span class="pun">)</span><span class="pln">
fmt</span><span class="pun">.</span><span class="typ">Println</span><span class="pun">(</span><span class="str">"Ints:   "</span><span class="pun">,</span><span class="pln"> intValue</span><span class="pun">)</span><span class="pln">

floatValue </span><span class="pun">:=</span><span class="pln"> </span><span class="pun">[]</span><span class="pln">float64</span><span class="pun">{</span><span class="lit">10.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">20.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5.5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8.5</span><span class="pun">}</span><span class="pln">
sort</span><span class="pun">.</span><span class="typ">Float64s</span><span class="pun">(</span><span class="pln">floatValue</span><span class="pun">)</span><span class="pln">
fmt</span><span class="pun">.</span><span class="typ">Println</span><span class="pun">(</span><span class="str">"floatValue:   "</span><span class="pun">,</span><span class="pln"> floatValue</span><span class="pun">)</span><span class="pln">

stringValue </span><span class="pun">:=</span><span class="pln"> </span><span class="pun">[]</span><span class="kwd">string</span><span class="pun">{</span><span class="str">"Raj"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Mohan"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"Roy"</span><span class="pun">}</span><span class="pln">
sort</span><span class="pun">.</span><span class="typ">Strings</span><span class="pun">(</span><span class="pln">stringValue</span><span class="pun">)</span><span class="pln">
fmt</span><span class="pun">.</span><span class="typ">Println</span><span class="pun">(</span><span class="str">"Strings:"</span><span class="pun">,</span><span class="pln"> stringValue</span><span class="pun">)</span><span class="pln">

str </span><span class="pun">:=</span><span class="pln"> sort</span><span class="pun">.</span><span class="typ">Float64sAreSorted</span><span class="pun">(</span><span class="pln">floatValue</span><span class="pun">)</span><span class="pln">
fmt</span><span class="pun">.</span><span class="typ">Println</span><span class="pun">(</span><span class="str">"Sorted: "</span><span class="pun">,</span><span class="pln"> str</span><span class="pun">)</span><span class="pln">

}

输出:

Ints:    [5 8 10 20]
floatValue:    [5.5 8.5 10.5 20.5]
Strings: [Mohan Raj Roy]
Sorted:  true

我们还可以实现自己的排序模式,假设我们想根据字符串的长度对字符串数组进行排序。为此,我们必须实现在排序接口中定义的自己的Less,Len和Swap方法。

然后,我们必须将数组转换为实现的类型。

package main
import "sort"
import "fmt"

type OrderByLengthDesc []string func (s OrderByLengthDesc) Len() int { return len(s) } func (str OrderByLengthDesc) Swap(i, j int) { str[i], str[j] = str[j], str[i] } func (s OrderByLengthDesc) Less(i, j int) bool { return len(s[i]) > len(s[j]) } func main() { city := []string{"New York", "London","Washington","Delhi"} sort.Sort(OrderByLengthDesc(city)) fmt.Println(city) }

输出:

[Washington New York London Delhi]

参考链接

www.learnfk.com/go/go-sorti…