Go語言使用sort包對任意類型元素的集合進行排序的方法
更新時間:2015年02月08日 12:12:53 作者:books1958
這篇文章主要介紹了Go語言使用sort包對任意類型元素的集合進行排序的方法,實例分析了sort排序所涉及的方法與相關(guān)的使用技巧,需要的朋友可以參考下
本文實例講述了Go語言使用sort包對任意類型元素的集合進行排序的方法。分享給大家供大家參考。具體如下:
使用sort包的函數(shù)進行排序時,集合需要實現(xiàn)sort.Inteface接口,該接口中有三個方法:
復(fù)制代碼 代碼如下:
// Len is the number of elements in the collection.
Len() int
// Less reports whether the element with
// index i should sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
Len() int
// Less reports whether the element with
// index i should sort before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
以下為簡單示例:
復(fù)制代碼 代碼如下:
//對任意對象進行排序
type Person struct {
name string
age int
}
//為*Person添加String()方法,便于輸出
func (p *Person) String() string {
return fmt.Sprintf("( %s,%d )", p.name, p.age)
}
type PersonList []*Person
//排序規(guī)則:首先按年齡排序(由小到大),年齡相同時按姓名進行排序(按字符串的自然順序)
func (list PersonList) Len() int {
return len(list)
}
func (list PersonList) Less(i, j int) bool {
if list[i].age < list[j].age {
return true
} else if list[i].age > list[j].age {
return false
} else {
return list[i].name < list[j].name
}
}
func (list PersonList) Swap(i, j int) {
var temp *Person = list[i]
list[i] = list[j]
list[j] = temp
}
func interfaceTest0203() {
fmt.Println("------")
p1 := &Person{"Tom", 19}
p2 := &Person{"Hanks", 19}
p3 := &Person{"Amy", 19}
p4 := &Person{"Tom", 20}
p5 := &Person{"Jogn", 21}
p6 := &Person{"Mike", 23}
pList := PersonList([]*Person{p1, p2, p3, p4, p5, p6})
sort.Sort(pList)
fmt.Println(pList)
/*output:
[( Amy,19 ) ( Hanks,19 ) ( Tom,19 ) ( Tom,20 ) ( Jogn,21 ) ( Mike,23 )] */
}
type Person struct {
name string
age int
}
//為*Person添加String()方法,便于輸出
func (p *Person) String() string {
return fmt.Sprintf("( %s,%d )", p.name, p.age)
}
type PersonList []*Person
//排序規(guī)則:首先按年齡排序(由小到大),年齡相同時按姓名進行排序(按字符串的自然順序)
func (list PersonList) Len() int {
return len(list)
}
func (list PersonList) Less(i, j int) bool {
if list[i].age < list[j].age {
return true
} else if list[i].age > list[j].age {
return false
} else {
return list[i].name < list[j].name
}
}
func (list PersonList) Swap(i, j int) {
var temp *Person = list[i]
list[i] = list[j]
list[j] = temp
}
func interfaceTest0203() {
fmt.Println("------")
p1 := &Person{"Tom", 19}
p2 := &Person{"Hanks", 19}
p3 := &Person{"Amy", 19}
p4 := &Person{"Tom", 20}
p5 := &Person{"Jogn", 21}
p6 := &Person{"Mike", 23}
pList := PersonList([]*Person{p1, p2, p3, p4, p5, p6})
sort.Sort(pList)
fmt.Println(pList)
/*output:
[( Amy,19 ) ( Hanks,19 ) ( Tom,19 ) ( Tom,20 ) ( Jogn,21 ) ( Mike,23 )] */
}
希望本文所述對大家的Go語言程序設(shè)計有所幫助。
相關(guān)文章
Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法
Go語言中int類型和string類型都是屬于基本數(shù)據(jù)類型,兩種類型的轉(zhuǎn)化都非常簡單。下面通過本文給大家分享Go語言string,int,int64 ,float之間類型轉(zhuǎn)換方法,感興趣的朋友一起看看吧2017-07-07golang如何實現(xiàn)mapreduce單進程版本詳解
這篇文章主要給大家介紹了關(guān)于golang如何實現(xiàn)mapreduce單進程版本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Golang環(huán)境變量設(shè)置和查看工具go env詳解
go env 是 Go 工具鏈中的一個命令,用于設(shè)置和查看當(dāng)前 Golang 環(huán)境的相關(guān)信息,對于理解、編譯和運行 Golang 程序非常有用,本文就給大家簡單的介紹一下Golang環(huán)境變量設(shè)置和查看工具go env,需要的朋友可以參考下2023-07-07