string - 为什么 sorted "tan"!= "ant"?

标签 string sorting go

<分区>

我试图通过对字符串中的一部分字节进行排序(使用 sort.Slice)来对字符串中的字符进行排序。我使用的代码有时会得到正确的结果,但有时会产生我无法理解的结果。

package main

import (
    "fmt"
    "sort"
)

func main() {
    for _, s := range []string{"nat", "tan", "ant"} {
        b := []byte(s)
        sort.Slice(b, func(i int, j int) bool { return s[i] < s[j] })
        fmt.Println(s, string(b))
    }
}

https://play.golang.org/p/bC9QWq7aF3G

我希望“nat”、“tan”和“ant”都被分类为“ant”,但“tan”被分类为“atn”。

最佳答案

sort.Slice 行更改为:

sort.Slice(b, func(i int, j int) bool { return b[i] < b[j] })

sort.Slice 需要您的 less 函数来比较 slice 中的值,以便按照您的预期方式进行排序。您的错误是您在 less 函数中使用了 s 而不是 b

关于string - 为什么 sorted "tan"!= "ant"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57086308/

相关文章:

c++ - 如何在 C++ 中获得 std::u8string 的正确长度?

arrays - 为什么我的字符串不能很好地拆分成数组?

python - python中的Opencv排序序列

mongodb - 在 Mongodb/pymongo 中按字符串长度排序

Golang在Struct数组中搜索特定项目

java - Graphics2D.drawString 中的换行问题

c# - 如何确定字符串是否具有正则表达式元字符? (C#)

python : Best way to sort a python dictionary based on values ; values are lists

json - golang json 解码,请求体为空

Java8 vs Go 执行速度