我想对元素的索引进行排序而不是对切片进行排序。因为[]string{"dog","cat","apple","bat"}我想得到[]int{2,3,1,0}package mainimport ( "fmt" "sort" "strings")func main() { arr := []string{"dog","cat","apple","bat"} n := len(arr) indices := make([]int, n) for i:=0;i<n;i++{ indices[i]=i } sort.Slice(indices, func(i,j int) bool {return strings.Compare(arr[i],arr[j])<0}) fmt.Println(arr, indices) // [dog cat apple bat] [2 1 0 3] sort.Slice(arr, func(i,j int) bool {return strings.Compare(arr[i],arr[j])<0}) fmt.Println(arr) //[apple bat cat dog] }
1 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
您的less()
函数获取的索引是可排序切片 ( indices
) 的索引,而不是另一个 ( arr
) 切片的索引。
所以使用i
和j
索引indices
。结果当然是用于arr
切片的索引(这是您对切片的定义),因此您可以使用表达式和indices
获得可比较的元素。arr[indices[i]
arr[indices[j]]
并且不要使用strings.Compare()
,只需使用 less<
运算符比较字符串。有关详细信息,请参阅Go 比较字符串。
sort.Slice(indices, func(i, j int) bool {
return arr[indices[i]] < arr[indices[j]]
})
通过此更改,您可以获得预期的输出(在Go Playground上尝试):
[dog cat apple bat] [2 3 1 0]
[apple bat cat dog]
- 1 回答
- 0 关注
- 68 浏览
添加回答
举报
0/150
提交
取消