我试图找出一种方法来对一个切片进行排序,例如:我要排序main_slice相对于other_sliceother_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 mainimport ( "fmt" "sort")type TwoSlices struct { main_slice []int other_slice []int}type SortByOther TwoSlicesfunc (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 正在改变,但它没有做我想要的,我做错了什么?
1 回答
慕码人2483693
TA贡献1860条经验 获得超9个赞
您忘记交换other_slice的实现中的元素Swap:
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]
}
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消