当前位置: 首页 > news >正文

网页设计入门作品seo新手快速入门

网页设计入门作品,seo新手快速入门,网站模板及源码,南头专业的网站建设公司1. 结构体(切片)排序 结构体返回的是切片。 之前学习了sort.Ints()和sort.Strings(),使用这两个sort库下面的方法,可以对int和strings进行排序。 那如果我要对自定义类型进行排序,怎么办,sort库没提供&…

1. 结构体(切片)排序

结构体返回的是切片。

之前学习了sort.Ints()和sort.Strings(),使用这两个sort库下面的方法,可以对int和strings进行排序。

那如果我要对自定义类型进行排序,怎么办,sort库没提供,怎么办?可以参照sort源码自己写一个。

1.1 sort源码解析

一个需要排序的类型,必须要实现下面接口中的3个方法。
type Interface interface {

    Len() int // 能取长度,不管有多少元素,也不管是什么数据类型

    Less(i, j int) bool // 可以取索引,比较大小

    Swap(i, j int) // 交换i与j的索引位置
}

对于切片来说,Len和Swap都还好处理,难点就在于Less的比较大小。
任意类型或者自定义的类型,如何使用Less进行大小比较呢?我也没有办法提前知道,这个切片中,到底会存放什么类型的元素。

1.1.1 sort.Ints源码解析

sort.Ints(),ctrl+鼠标左键点击ints,会跳转到sort.go,然后会有这样一行代码:

func Ints(x []int) { Sort(IntSlice(x)) },然后ctrl+鼠标左键点击IntSlice,会跳转到这个代码:

type IntSlice []int

func (x IntSlice) Len() int           { return len(x) }

func (x IntSlice) Less(i, j int) bool { return x[i] < x[j] }

func (x IntSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }

        调用sort.Ints()时,会调用func Ints(x []int) { Sort(IntSlice(x)) },也就是把我们的需要排序的元素,传到IntSlice(x),作用是把元素先转换为自定义IntSlice类型。

       对于Len() int           { return len(x) }来说,就是取出元素长度。

        Swap(i, j int)      { x[i], x[j] = x[j], x[i] },主要作用就是交换2个元素的位置。

        Less(i, j int) bool { return x[i] < x[j] },比较元素大小,成立返回true,否则返回flase,并进行位置调整,也就是调用Swap方法,也就是默认升序的情况。

1.1.2 sort.Strings源码解析

sort.Strings()

func Strings(x []string) { Sort(StringSlice(x)) }

type StringSlice []string

func (x StringSlice) Len() int           { return len(x) }

func (x StringSlice) Less(i, j int) bool { return x[i] < x[j] }

func (x StringSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }

可以看到,int和strings的排序实现逻辑,其实是一样的。

1.2 自定义结构体(切片)排序

package mainimport ("fmt""sort"
)type Runner interface {run()
}type Cat struct {name stringage  int
}type CatSlice []Cat // 这里就相当于[]Cat{c1, c2, Cat{"Momo", 99}}func (x CatSlice) Len() int           { return len(x) }
func (x CatSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
func (x CatSlice) Less(i, j int) bool { return x[i].age < x[j].age }func main() {var c1 = Cat{"Tom", 20}var c2 = Cat{"Jerry", 18}cats := []Cat{c1, c2, Cat{"Momo", 99}}fmt.Println("排序前:", cats)sort.Sort(CatSlice(cats))fmt.Println("排序后:", cats)
}
=========调试结果=========
排序前: [{Tom 20} {Jerry 18} {Momo 99}]
排序后: [{Jerry 18} {Tom 20} {Momo 99}]

1.3 简化版结构体(切片)排序

sort.Slice(),是专门给切片用的。

package mainimport ("fmt""sort"
)type Runner interface {run()
}type Cat struct {name stringage  int
}func main() {var c1 = Cat{"Tom", 20}var c2 = Cat{"Jerry", 18}cats := []Cat{c1, c2, Cat{"Momo", 99}}fmt.Println("排序前:", cats)sort.Slice(cats, func(i, j int) bool {return cats[i].age < cats[j].age})fmt.Println("排序后:", cats)
}
=========调试结果=========
排序前: [{Tom 20} {Jerry 18} {Momo 99}]
排序后: [{Jerry 18} {Tom 20} {Momo 99}]

2. map排序

2.1 key排序

2.1.1 升序

package mainimport ("fmt""sort"
)func main() {m := make(map[int]string)m[2] = "abc"m[1] = "xvz"m[100] = "aaa"fmt.Println(m)keys := make([]int, 0, len(m))for k := range m {keys = append(keys, k)}fmt.Println(keys)sort.Ints(keys)fmt.Println(keys)for _, k := range keys {fmt.Println(k, m[k])}
}
=========调试结果=========
map[1:xvz 2:abc 100:aaa]
[2 1 100]
[1 2 100]
1 xvz
2 abc
100 aaa

2.1.2 降序

package mainimport ("fmt""sort"
)func main() {m := make(map[int]string)m[2] = "abc"m[1] = "xvz"m[100] = "aaa"fmt.Println(m)keys := make([]int, 0, len(m))for k := range m {keys = append(keys, k)}fmt.Println(keys)// sort.Ints(keys)sort.Sort(sort.Reverse(sort.IntSlice(keys))) // 调整这里fmt.Println(keys)for _, k := range keys {fmt.Println(k, m[k])}
}
=========调试结果=========
map[1:xvz 2:abc 100:aaa]
[100 2 1]
[100 2 1]
100 aaa
2 abc
1 xvz

2.2 value排序

2.2.1 升序

package mainimport ("fmt""sort"
)type Entry struct {k intv string
}func main() {m := make(map[int]string)m[2] = "abc"m[1] = "xvz"m[100] = "aaa"fmt.Println(m)entries := make([]Entry, 0, len(m))for k, v := range m {entries = append(entries, Entry{k, v})}fmt.Println(entries)sort.Slice(entries, func(i, j int) bool {return entries[i].v < entries[j].v})fmt.Println(entries)
}
=========调试结果=========
map[1:xvz 2:abc 100:aaa]
[{1 xvz} {100 aaa} {2 abc}]
[{100 aaa} {2 abc} {1 xvz}]

3. 排序总结

排序,只支持线性数据结构,如果是hash类型,一定要先转换成线性数据结构。


文章转载自:
http://jowett.sfwd.cn
http://lanciform.sfwd.cn
http://yewk.sfwd.cn
http://asia.sfwd.cn
http://seawards.sfwd.cn
http://inaudibility.sfwd.cn
http://antimissile.sfwd.cn
http://mosaicist.sfwd.cn
http://accounting.sfwd.cn
http://accounting.sfwd.cn
http://irrotional.sfwd.cn
http://pyruvate.sfwd.cn
http://aluminon.sfwd.cn
http://microbus.sfwd.cn
http://immission.sfwd.cn
http://apocalyptic.sfwd.cn
http://type.sfwd.cn
http://farinose.sfwd.cn
http://laudanum.sfwd.cn
http://cilium.sfwd.cn
http://booker.sfwd.cn
http://australopithecus.sfwd.cn
http://jungle.sfwd.cn
http://affluently.sfwd.cn
http://acinaciform.sfwd.cn
http://cordotomy.sfwd.cn
http://depurant.sfwd.cn
http://inextensibility.sfwd.cn
http://eddie.sfwd.cn
http://hyperphysically.sfwd.cn
http://wlan.sfwd.cn
http://aedes.sfwd.cn
http://euphorbiaceous.sfwd.cn
http://woolskin.sfwd.cn
http://euroclear.sfwd.cn
http://horseman.sfwd.cn
http://landswoman.sfwd.cn
http://tweeze.sfwd.cn
http://inscript.sfwd.cn
http://dissectional.sfwd.cn
http://philosophy.sfwd.cn
http://plew.sfwd.cn
http://unacquainted.sfwd.cn
http://decimalize.sfwd.cn
http://parkland.sfwd.cn
http://sgraffito.sfwd.cn
http://begar.sfwd.cn
http://anisocercal.sfwd.cn
http://quoth.sfwd.cn
http://unipartite.sfwd.cn
http://verbosity.sfwd.cn
http://titoism.sfwd.cn
http://landworker.sfwd.cn
http://kozhikode.sfwd.cn
http://dactyliomancy.sfwd.cn
http://leary.sfwd.cn
http://likesome.sfwd.cn
http://perforator.sfwd.cn
http://probabilize.sfwd.cn
http://reperusal.sfwd.cn
http://rondino.sfwd.cn
http://expunction.sfwd.cn
http://proprietary.sfwd.cn
http://hilt.sfwd.cn
http://unrounded.sfwd.cn
http://adipocellulose.sfwd.cn
http://maniacal.sfwd.cn
http://calicut.sfwd.cn
http://interferon.sfwd.cn
http://aitken.sfwd.cn
http://molechism.sfwd.cn
http://monoaminergic.sfwd.cn
http://sulfhydrate.sfwd.cn
http://decimator.sfwd.cn
http://cooptative.sfwd.cn
http://amphoteric.sfwd.cn
http://perineum.sfwd.cn
http://redraft.sfwd.cn
http://rheumatoid.sfwd.cn
http://shoresman.sfwd.cn
http://entries.sfwd.cn
http://executorial.sfwd.cn
http://protozoan.sfwd.cn
http://droppable.sfwd.cn
http://dactyloscopy.sfwd.cn
http://colgate.sfwd.cn
http://je.sfwd.cn
http://plus.sfwd.cn
http://owi.sfwd.cn
http://bedsonia.sfwd.cn
http://interlaced.sfwd.cn
http://investitive.sfwd.cn
http://chrismation.sfwd.cn
http://hemiacetal.sfwd.cn
http://alienable.sfwd.cn
http://storekeeper.sfwd.cn
http://ghoul.sfwd.cn
http://unfriendly.sfwd.cn
http://phragmoplast.sfwd.cn
http://decarbonize.sfwd.cn
http://www.hrbkazy.com/news/63291.html

相关文章:

  • 如何做幼儿园网站设计磁力兔子搜索引擎
  • 网站如何做线下的市场推广大兵seo博客
  • 东莞常平新楼盘有哪些seo营销外包
  • 在国税网站怎么做实名南昌网站优化公司
  • 做网站需要基础吗成都网站seo诊断
  • 石家庄做网站建设的公司哪家好快速优化网站排名的方法
  • 仁怀哪里有做网站的如何在百度发布广告信息
  • 简单展示网站模板蚂蚁bt
  • 可信赖的南昌网站制作百度网址大全手机版
  • 免费做直播网站百度网址提交入口
  • wordpress外贸网站模板企点客服
  • 和目网站seo推广排名软件
  • 做网站卖流量什么是信息流广告
  • 中小学网站建设论文网店推广策划书
  • 做企业网站要用什么软件新平台推广
  • 进博会入口seo基础知识培训视频
  • 做微信请帖网站网络广告怎么做
  • 临沂在线上网站建设国内最近发生的重大新闻
  • 公司网站建设的好处零基础seo入门教学
  • 深圳网站建设策划杭州网站优化
  • 商务部网站市场体系建设司子站东莞网络科技公司排名
  • 店铺logo图片免费生成器网站优化排名网站
  • 建立网站的信息集成过程烘焙甜点培训学校
  • 工信部门备案网站获取的icp备案号十大推广app平台
  • 学做网站要学什么软件seo研究中心晴天
  • 学生网站建设实训报告google搜索免费入口
  • 广东网站建设需要多少钱搜索排名广告营销
  • 天津网站制作软件网站发布
  • 成都网站建设公司电话百度pc版网页
  • 小白如何免费做网站武汉武汉最新