你可以箱子一個sort.Interface
實施齊聲切片進行排序,基於第一片的價值觀:
https://play.golang.org/p/y0EFj8wUN0
type by struct {
Indices []int
Values []int
}
func (b by) Len() int { return len(b.Values) }
func (b by) Less(i, j int) bool { return b.Indices[i] < b.Indices[j] }
func (b by) Swap(i, j int) {
b.Indices[i], b.Indices[j] = b.Indices[j], b.Indices[i]
b.Values[i], b.Values[j] = b.Values[j], b.Values[i]
}
func main() {
x := []int{3, 4, 2, 1, 6}
y := []int{11, 12, 15, 16, 17}
sort.Sort(by{Indices: x, Values: y})
fmt.Println(x)
fmt.Println(y)
}
// [1 2 3 4 6]
// [16 15 11 12 17]
或者,如果你想排序任何數量的切片,像這樣你可以定義一個[][]int
類型就像這樣
type matrix [][]int
func (m matrix) Len() int {return len(m[0])}
func (m matrix) Less(i, j int) bool { return m[0][i] < m[0][j] }
func (m matrix) Swap(i, j int) {
for _, s := range m {
s[i], s[j] = s[j], s[i]
}
}
func main() {
x := []int{3, 4, 2, 1, 6}
y := []int{11, 12, 15, 16, 17}
z := []int{22, 33, 44, 55, 66}
sort.Sort(matrix{x, y, z})
fmt.Println(x)
fmt.Println(y)
fmt.Println(z)
}
// [1 2 3 4 6]
// [16 15 11 12 17]
// [55 44 22 33 66]
迭代過'x',並從'填充值的新的數組Y [X_I]'https://play.golang.org/p/z2j_MrEaC8 – zerkms
如若陣列中的值'6' 'x'實際上是'5'? –
不一定。 – user3134575