猿问

相对于 go 中的另一个切片对切片进行排序

我试图找出一种方法来对一个切片进行排序,例如:


我要排序main_slice相对于other_slice


other_slice = []int{3,5,1,2,7}


main_slice =  []int{1,2,3,4,5}


3inmain_slice对应于other_slice( 1) 中的最低值,4第二低 ( 2);因此,我希望排序main_slice to be:{3,4,1,2,5}


我使用本教程作为参考,但无法提出解决方案,这是我的尝试:


package main


import ( "fmt"

         "sort"

)


type TwoSlices struct {

    main_slice  []int

    other_slice  []int

}


type SortByOther TwoSlices


func (sbo SortByOther) Len() int {

    return len(sbo.main_slice)

}


func (sbo SortByOther) Swap(i, j int) {

    sbo.main_slice[i], sbo.main_slice[j] = sbo.main_slice[j], sbo.main_slice[i]

}


func (sbo SortByOther) Less(i, j int) bool {

    return sbo.other_slice[i] < sbo.other_slice[j] 

}



func main() {

    my_other_slice := []int{3,5,1,2,7}

    my_main_slice := []int{1,2,3,4,5} // sorted : {3,4,1,2,5}


    my_two_slices := TwoSlices{main_slice: my_main_slice, other_slice: my_other_slice}


    fmt.Println("Not sorted : ", my_two_slices.main_slice)


    sort.Sort(SortByOther(my_two_slices))

    fmt.Println("Sorted : ", my_two_slices.main_slice)


}

我的输出:


Not sorted :  [1 2 3 4 5]

Sorted :  [1 3 2 4 5]

main_slice 正在改变,但它没有做我想要的,我做错了什么?


BIG阳
浏览 150回答 1
1回答

慕码人2483693

您忘记交换other_slice的实现中的元素Swap:func (sbo SortByOther) Swap(i, j int) {&nbsp; &nbsp; sbo.main_slice[i], sbo.main_slice[j] = sbo.main_slice[j], sbo.main_slice[i]&nbsp; &nbsp; sbo.other_slice[i], sbo.other_slice[j] = sbo.other_slice[j], sbo.other_slice[i]}
随时随地看视频慕课网APP

相关分类

Go
我要回答