我见过用其他几种语言提出这个问题,每种语言都有很好的答案。IE
如何按行长度对文件进行排序,然后按字母顺序对第二个键进行排序?
我无法在 Golang 中弄清楚:/假设我有这个列表:
2 22 2H 2J 2J2 2J3 2J322422 2J322423 2J33 2M 2P 2W 2X
Run Code Online (Sandbox Code Playgroud)
我希望排序后的输出为:
2 22 2H 2J 2M 2P 2W 2X 2J2 2J3 2J33 2J322422 2J322423
Run Code Online (Sandbox Code Playgroud)
我在 Golang 中尝试了一些东西,但就是无法让它工作。
// Log
t.Log.Println(values)
// Sort values alphabetically
sort.Strings(values)
// Sort values by length
sort.Slice(values, func(i, j int) bool {
return len(values[i]) < len(values[j])
})
// Log
t.Log.Println(values)
Run Code Online (Sandbox Code Playgroud) 这里看起来像3在两行之后的空格打破了数字排序并让字母排序开始,所以11< 2:
$ echo -e '3 2\n3 11' | sort -n
3 11
3 2
Run Code Online (Sandbox Code Playgroud)
在man sort,我读
Run Code Online (Sandbox Code Playgroud)-s, --stable stabilize sort by disabling last-resort comparison
这意味着没有 -s一个不得已的比较是完成(之间的关系,因为-s不影响非关系)。
所以问题是:这种最后的比较是如何完成的?如果有必要回答问题,欢迎参考源代码。
这个答案 Unix从实验中推断出关系的排序是按字典顺序排列的。
标准/POSIX 是否对此有任何说明?