mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 04:22:22 +00:00
ch2-6: 完善
This commit is contained in:
parent
58fb12e46e
commit
30d7a67d28
@ -331,6 +331,27 @@ func Slice(slice interface{}, less func(a, b int) bool) {
|
||||
```
|
||||
|
||||
首先需要判断传入的接口类型必须是切片类型。然后通过反射获取qsort函数需要的切片信息,并调用C语言的qsort函数。
|
||||
|
||||
基于新包装的函数我们可以采用和标准库相似的方式排序切片:
|
||||
|
||||
```go
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
qsort "."
|
||||
)
|
||||
|
||||
func main() {
|
||||
values := []int64{42, 9, 101, 95, 27, 25}
|
||||
|
||||
qsort.Slice(values, func(i, j int) bool {
|
||||
return values[i] < values[j]
|
||||
})
|
||||
|
||||
fmt.Println(values)
|
||||
}
|
||||
```
|
||||
|
||||
为了避免在排序过程中,排序数组的上下文信息`go_qsort_compare_info`被修改,我们进行了全局加锁。
|
||||
因此目前版本的qsort.Slice函数是无法并发执行的,读者可以自己尝试改进这个限制。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user