以下是一个按值出现次数对切片进行排序的示例代码:
package main
import (
"fmt"
"sort"
)
func sortSliceByValueCount(slice []int) []int {
// 创建一个map用于存储每个元素出现的次数
countMap := make(map[int]int)
// 统计每个元素出现的次数
for _, num := range slice {
countMap[num]++
}
// 将map转换为slice,同时记录每个元素的出现次数
var countSlice []struct {
num int
count int
}
for num, count := range countMap {
countSlice = append(countSlice, struct {
num int
count int
}{num, count})
}
// 按照出现次数对slice进行排序
sort.Slice(countSlice, func(i, j int) bool {
return countSlice[i].count > countSlice[j].count
})
// 构造结果slice
var result []int
for _, item := range countSlice {
for i := 0; i < item.count; i++ {
result = append(result, item.num)
}
}
return result
}
func main() {
slice := []int{1, 3, 2, 2, 1, 1, 4, 4, 4, 3, 3, 3}
sortedSlice := sortSliceByValueCount(slice)
fmt.Println(sortedSlice)
}
运行以上代码将输出 [3 3 3 3 1 1 1 4 4 4 2 2]
,即按照元素出现的次数对切片进行排序后得到的结果。