go - sort.Sort 不修改数组
问题描述
下面的代码应该创建一个 ints ( a
) 数组并对其进行排序,但 sort.Sort 似乎不会修改变量。
package main
import (
"fmt"
"sort"
)
type IntArray [5]int
type byNum [5]int
func (s byNum) Len() int {
return len(s)
}
func (s byNum) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s byNum) Less(i, j int) bool {
return s[i] < s[j]
}
func main() {
a := IntArray{5,3,4,1,2}
fmt.Println(a)
sort.Sort(byNum(a))
fmt.Println(a)
}
https://play.golang.org/p/bhcwgosqvis
[5 3 4 1 2]
[5 3 4 1 2]
Program exited.
为什么这不起作用?
解决方案
问题是 Swap 方法正在更改参数数组,而不是调用者中的数组。
通过将 byNum 声明为切片来修复:
type byNum []int
...
sort.Sort(byNum(a[:]))
在此调用中,切片参数的后备数组是您要修改的数组。
推荐阅读
- javascript - console.log 在事件提交中不起作用
- azure-devops - 如何从 Azure DevOps(VSTS 工具)启动浏览器 (IE)
- sql - 如何计算每小时的比率?
- python - 如何让 Celery 工作人员使用“外部”RabbitMQ 队列?
- android - 移动预览上的奇怪框
- printing - 在 Lisp 的同一行的一个打印语句中打印带有从函数返回的数字的文本
- javascript - 在 ReactJs 中将函数作为道具传递的问题
- javascript - 从输入字段中删除特殊字符
- c# - 如何在 ASP.NET Core WebApi 中将键值对传递给 HttpGet?
- uwp - UWP WebView 中的查看器问题