string - 去整理一片 rune ?

标签 string sorting go slice rune

我在按字符排序字符串时遇到问题(要检查两个字符串是否是字谜,我想对它们都进行排序,并检查是否相等)。

我可以像这样得到字符串 s[]rune 表示:

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* 的 slice 进行排序?

编辑:我确实整理了我的 rune ,但是男孩,这很难看。

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)
}

所以基本上,如果你有一个 slice ,你必须将它包装在一个实现 sort.Interface 的类型中。所有这些实现都将具有完全相同的方法体(如 sort.IntSlicesort.Float64Slice)。如果这真的是多么丑陋,那么他们为什么不在 sort 包中提供这些 WhatSlice 包装器呢?缺乏泛型现在开始受到非常严重的伤害。必须有更好的方法来分类事物。

最佳答案

使用 sort.Sort(data Interface)并实现sort.Interface ,请参阅包文档中的示例。

您不能将 int32rune 用作 int。查看comment int.

int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.

关于string - 去整理一片 rune ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171136/

相关文章:

python - python中的序列化字符串PK

Java奇怪的字符串间距问题

php - 数组按第一个值排序

svg - 如何/在何处执行生成 svg 的 golang 二进制文件

go - 返回 Golang 中的 CPU 插槽数、核心数和线程数

c - 字符串数组、strcpy 和字符串的问题

仅相差一个字符的字符串

javascript,根据arry2对array1进行排序

scala - 从 Scala 中的方法返回一个 Ordered[T]

go - 在需要时中断 anaconda 的推特流