欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

關(guān)于golang之排序的使用方法-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)關(guān)于golang之排序的使用方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都地區(qū)優(yōu)秀IDC服務(wù)器托管提供商(創(chuàng)新互聯(lián)).為客戶(hù)提供專(zhuān)業(yè)的中國(guó)電信成都樞紐中心,四川各地服務(wù)器托管,中國(guó)電信成都樞紐中心、多線服務(wù)器托管.托管咨詢(xún)專(zhuān)線:18980820575

golang標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)了許多常用的排序方法,比如對(duì)整數(shù)序列排序:sort.Ints()
那么如果對(duì)自定義的數(shù)據(jù)結(jié)構(gòu)排序怎么做呢?
比如對(duì)一個(gè)用戶(hù)列表,按他們的積分排序:

首先定義數(shù)據(jù)結(jié)構(gòu),為了能清楚說(shuō)明問(wèn)題,只給兩個(gè)字段。

type User struct {
	Name  string
	Score int}type Users []User

golang中想要自定義排序,自己的結(jié)構(gòu)要實(shí)現(xiàn)三個(gè)方法:

// 摘自: $GOROOT/src/sort/sort.gotype Interface interface {
	// 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)}

這個(gè)設(shè)計(jì)太妙了有沒(méi)有,想想我們學(xué)過(guò)的排序,都要序列長(zhǎng)度,比大小,交換元素。
那對(duì)上述的Users,也就是用戶(hù)列表如何使用golang的排序呢?

先按它說(shuō)的,實(shí)現(xiàn)這三個(gè)方法:

func (us Users) Len() int {
	return len(us)}func (us Users) Less(i, j int) bool {
	return us[i].Score < us[j].Score}func (us Users) Swap(i, j int) {
	us[i], us[j] = us[j], us[i]}

然后就能排序了:

func main() {
	var us Users	const N = 6

	for i := 0; i < N; i++ {
		us = append(us, User{
			Name:  "user" + strconv.Itoa(i),
			Score: rand.Intn(N * N),
		})
	}

	fmt.Printf("%v\n", us)
	sort.Sort(us)
	fmt.Printf("%v\n", us)}

可能的輸出為:

[{user0 5} {user1 15} {user2 11} {user3 11} {user4 13} {user5 6}]
[{user0 5} {user5 6} {user2 11} {user3 11} {user4 13} {user1 15}]

可以看到,分?jǐn)?shù)從小到大排列了。

不過(guò)一般我們積分這種東西都是從大到小排序的,只需將
sort.Sort(us)改成sort.Sort(sort.Reverse(us))就行。

確實(shí)很方便。

當(dāng)然,如果出于特殊需要,系統(tǒng)提供的排序不能滿(mǎn)足我們的需要,
還是可以自己實(shí)現(xiàn)排序的, 比如針對(duì)上述,自己來(lái)排序(從小到大):

func myqsort(us []User, lo, hi int) {
	if lo < hi {
		pivot := partition(us, lo, hi)
		myqsort(us, lo, pivot-1)
		myqsort(us, pivot+1, hi)
	}}func partition(us []User, lo, hi int) int {
	tmp := us[lo]
	for lo < hi {
		for lo < hi && us[hi].Score >= tmp.Score {
			hi--
		}
		us[lo] = us[hi]

		for lo < hi && us[lo].Score <= tmp.Score {
			lo++
		}
		us[hi] = us[lo]
	}
	us[lo] = tmp	return hi}

一個(gè)簡(jiǎn)單的快速排序,調(diào)用時(shí)只需要myqsort(us)就可以 了。

關(guān)于關(guān)于golang之排序的使用方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

文章標(biāo)題:關(guān)于golang之排序的使用方法-創(chuàng)新互聯(lián)
標(biāo)題來(lái)源:http://aaarwkj.com/article26/dpiicg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、軟件開(kāi)發(fā)網(wǎng)站維護(hù)、靜態(tài)網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
超碰91人人草人人干| 国产av日韩精品一区二区三区| 国产亚洲精品精品国产亚洲| 尤物视频最新在线观看| 欧美日韩一区二区高清在线| 亚洲桃色一区二区三区四区| 日韩亚洲欧美国产另类| 国产精品一区二区日韩新区| 中文字幕亚洲精品乱码在线| 亚洲激情欧美激情在线| 久久精品一本久久99精品| 欧美中文字幕精在线不卡| 日韩成人在线视频观看| 白白色最新福利在线视频观看| 最新亚洲国产高清激情| 精品视频美女肉体亚洲| 99精品热视频在线观看| 日本女优久久精品观看| 国产精品国产三级区别| 男女视频午夜刺激一区二区| 国产自偷一区二区三区| 国产精品亚洲欧美日韩在线播放| 韩国一级av免费在线| 国内精品老年人视频网站| 中文字幕国产精品综合一区| 人妖一区二区三区在线观看| 人妻激情偷乱视91九色| 97精品免费在线观看| 日韩av高清不卡一区二区三区| 国产无遮挡又黄又爽网站| 久久综合久中文字幕青草| 欧美日韩精品国产精品| 久久热久久热在线视频| 91天美精东果冻麻豆| 亚洲伦理第一页中文字幕| 高清偷自拍亚洲精品三区| 欧美综合亚洲韩精品区| 国产在线视频不卡福利片| 日韩av亚洲在线观看| 成人综合影视中文字幕| 国产精品国产三级农村av|