比尔萄堡

上帝说: “要有光” 于是,就有了光。


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

sort.Slice的慎用

时间: 2022-08-31 分类: Golang   字数: 219 字 阅读: 1分钟 阅读次数:

sort.Slice 的第二个参数,如果使用了和第一个参数没关系的变量,对第一个参数的排序并不按预期来。不像lodash的sortBy。

因为快排过程中,第一个参数的元素位置会变动。

func main() {
	// 排序正常操作
	c := []float64{1308.24, 1912.5900000000001, 0, 5164.84, 6375.8, 6032.639999999999, 5794.66, 190.79, 4472.87, 5290.28, 185.26, 459.59, 139.39, 95.39}
	sort.Slice(c, func(i, j int) bool { return c[i] > c[j] })
	log.Println("sorted c by float:", c)

	// less函数中使用外部变量, 排序有问题
	var d = make([]int, len(c))
	for idx, item := range c {
		d[idx] = int(math.Round(item))
	}
	sort.Slice(c, func(i, j int) bool { return d[i] > d[j] })
	log.Println("sorted c by int:", c)
}

对应输出

2022/08/30 11:07:12 sorted c by float: [6375.8 6032.639999999999 5794.66 5290.28 5164.84 4472.87 1912.5900000000001 1308.24 459.59 190.79 185.26 139.39 95.39 0] 

2022/08/30 11:07:12 sorted c by int: [1308.24 6375.8 5794.66 5290.28 5164.84 4472.87 1912.5900000000001 6032.639999999999 459.59 190.79 185.26 139.39 95.39 0]
#golang# #sort#

标题:sort.Slice的慎用

作者:训导主任林作栋

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

TCP稳定性
异步跳转被拦截
训导主任林作栋

训导主任林作栋

戏谑的码农,北野武的拥趸,李安的迷弟,伍佰的Fans

55 日志
23 分类
62 标签
豆瓣
友情链接
  • Obsidian
  • V2EX
  • 关注黑客与极客
  • 廖雪峰
标签云
  • Linux 6
  • K8s 5
  • 数据库 5
  • Golang 4
  • Etcd 3
  • Mysql 3
  • Ai 2
  • Gitlab 2
  • Postgres 2
  • 前端 2
© 2010 - 2024 比尔萄堡
Powered by - Hugo v0.58.2 / Theme by - NexT
/
Storage by Vercel / 刘 ICP 备 18047355 号
0%