900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Golang对中文汉字进行拼音排序

Golang对中文汉字进行拼音排序

时间:2024-05-01 05:45:15

相关推荐

Golang对中文汉字进行拼音排序

sort.Strings排序默认是按照Unicode码点的顺序的。

如果需要按照拼音排序, 可以通过GBK转换实现, 自定义一个排序接口, 这里的排序优先级数字>字母>汉字

代码如下:

package mainimport ("bytes""fmt""io/ioutil""sort""/x/text/encoding/simplifiedchinese""/x/text/transform")type Animal struct {Id intName stringAge int}type Animals []Animalfunc (a Animals) Len() int { return len(a) }func (s Animals) Less(i, j int) bool {a, _ := UTF82GBK(s[i].Name)b, _ := UTF82GBK(s[j].Name)bLen := len(b)for idx, chr := range a {if idx > bLen-1 {return false}if chr != b[idx] {return chr < b[idx]}}return true}func (a Animals) Swap(i, j int) { a[i], a[j] = a[j], a[i] }//UTF82GBK : transform UTF8 rune into GBK byte arrayfunc UTF82GBK(src string) ([]byte, error) {GB18030 := simplifiedchinese.All[0]return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))}//GBK2UTF8 : transform GBK byte array into UTF8 stringfunc GBK2UTF8(src []byte) (string, error) {GB18030 := simplifiedchinese.All[0]bytes, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(src), GB18030.NewDecoder()))return string(bytes), err}func main() {an := Animals{Animal{Id: 1, Name: "请求", Age: 11},Animal{Id: 2, Name: "当当", Age: 22},Animal{Id: 3, Name: "呃呃", Age: 33},Animal{Id: 4, Name: "z奥啊", Age: 44},Animal{Id: 5, Name: "宝宝z", Age: 55},Animal{Id: 6, Name: "宝宝a", Age: 6},}sort.Sort(an)fmt.Println(an)//[{4 z奥啊 44} {6 宝宝a 6} {5 宝宝z 55} {2 当当 22} {1 请求 11} {3 呃呃 33}]}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。