String 对字符串片段排序:字母按字母顺序*在*之后*降序数字
鉴于: 排序后:String 对字符串片段排序:字母按字母顺序*在*之后*降序数字,string,sorting,go,slice,String,Sorting,Go,Slice,鉴于: 排序后: alphanumeric := ["aaa","bbb","ccc","111","222","333"] 已尝试用于内置排序包: ["333","222","111","aaa","bbb","ccc"] 已关闭,但数字部分将按升序排序
alphanumeric := ["aaa","bbb","ccc","111","222","333"]
已尝试用于内置排序包:
["333","222","111","aaa","bbb","ccc"]
已关闭,但数字部分将按升序排序
[“111”、“222”、“333”、“aaa”、“bbb”、“ccc”]
此外:
结果不需要:[“ccc”、“bbb”、“aaa”、“333”、“222”、“111”]
这些东西都很新,谢谢你的提示
sort.Slice(字母数字,func(i,j int)bool{
//检查我们是否有数字,并对它们进行相应的排序
如果z,err:=strconv.Atoi(字母数字[i]);err==nil{
如果y,err:=strconv.Atoi(字母数字[j]);err==nil{
返回y字母数字[i]
})
显示您试图解决的问题。@BurakSerdar抱歉已更新。请勿在问题标题中添加“[已解决]”;所以我们有一个机制,可以接受的答案。如果你自己解决了这个问题,你可以发布自己问题的答案并接受。非常感谢!顺便说一句,我发现如果数字以十进制(1.236/2.0等)表示,或者代表一些版本号(1.0.0.2),则此操作可能失败。更新了一点修改后的帖子。
sort.Strings(alphanumeric)
sort.Slice(alphanumeric, func(i, j int) bool {
return alphanumeric[i] > alphanumeric[j]
})
sort.Slice(alphanumeric, func(i, j int) bool {
// check if we have numbers, sort them accordingly
if z, err := strconv.Atoi(alphanumeric[i]); err == nil {
if y, err := strconv.Atoi(alphanumeric[j]); err == nil {
return y < z
}
// if we get only one number, alway say its greater than letter
return true
}
// compare letters normally
return alphanumeric[j] > alphanumeric[i]
})