我想對元素的索引進行排序,而不是對切片進行排序。因為[]string{"dog","cat","apple","bat"}我想得到[]int{2,3,1,0}
package main
import (
"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]
}
uj5u.com熱心網友回復:
您的less()函式獲得的索引是可排序切片 ( indices) 的索引,而不是另一個 ( arr) 切片的索引。
所以使用iandj來索引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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/462142.html
上一篇:SQL從多個表中選擇和排序
