我无法按字符对字符串进行排序(要检查两个字符串是否是字谜,我想对它们进行排序,并检查是否相等)。
我可以像这样得到[]rune
字符串的表示s
:
runes := make([]rune, len(s))
copy(runes, []rune(s))
我可以像这样对整数进行排序
someInts := []int{5, 2, 6, 3, 1, 4} // unsorted
sort.Ints(someInts)
但这rune
只是一个别名,int32
所以我应该可以打电话
sort.Ints(runes)
但是,我收到错误:
cannot use runes (type []rune) as type []int in function argument
那么...如何对 int32、int64 或 int* 的切片进行排序?
编辑:我确实整理了我的符文,但是男孩,这很难看。
type RuneSlice []rune
func (p RuneSlice) Len() int { return len(p) }
func (p RuneSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p RuneSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func sorted(s string) string {
runes := []rune(s)
sort.Sort(RuneSlice(runes))
return string(runes)
}
所以基本上,如果你有一个切片,你必须将它包装在一个实现 sort.Interface
. 所有这些实现都将具有完全相同的方法体(如sort.IntSlice
和sort.Float64Slice
)。如果这真的是多么丑陋,那么他们为什么不在包中提供这些 WhatSlice 包装器sort
呢?缺乏仿制药现在开始受到非常严重的伤害。必须有更好的方法来分类事物。