相对于另一个切片对切片进行排序
Sort slice with respect to another slice in go
我正在尝试找出一种方法来相对于另一个对一个切片进行排序,例如:
我想根据 other_slice
对 main_slice
进行排序
other_slice = []int{3,5,1,2,7}
main_slice = []int{1,2,3,4,5}
3
in main_slice
对应于 other_slice
中的最低值 (1
),4
对应于第二低的值 (2
) ;因此,我希望排序 main_slice to be
: {3,4,1,2,5}
我参考了this教程,但没有找到解决办法,我的尝试是:
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
正在更改,但它没有按照我的要求进行,我做错了什么?
您忘记在 Swap
的实现中交换 other_slice
的元素:
func (sbo SortByOther) Swap(i, j int) {
sbo.main_slice[i], sbo.main_slice[j] = sbo.main_slice[j], sbo.main_slice[i]
sbo.other_slice[i], sbo.other_slice[j] = sbo.other_slice[j], sbo.other_slice[i]
}
我正在尝试找出一种方法来相对于另一个对一个切片进行排序,例如:
我想根据 other_slice
main_slice
进行排序
other_slice = []int{3,5,1,2,7}
main_slice = []int{1,2,3,4,5}
3
in main_slice
对应于 other_slice
中的最低值 (1
),4
对应于第二低的值 (2
) ;因此,我希望排序 main_slice to be
: {3,4,1,2,5}
我参考了this教程,但没有找到解决办法,我的尝试是:
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
正在更改,但它没有按照我的要求进行,我做错了什么?
您忘记在 Swap
的实现中交换 other_slice
的元素:
func (sbo SortByOther) Swap(i, j int) {
sbo.main_slice[i], sbo.main_slice[j] = sbo.main_slice[j], sbo.main_slice[i]
sbo.other_slice[i], sbo.other_slice[j] = sbo.other_slice[j], sbo.other_slice[i]
}