1 回答

TA貢獻1803條經(jīng)驗 獲得超3個贊
一種方法是sort.Slice(...)與“較少”(比較器)函數(shù)一起使用,該函數(shù)僅返回兩個給定值與目標值之間較小的距離。
例如(Go Playground):
func main() {
xs := []int{2781, 4706, 1347, 1192, 3087, 2920, 198, 2312, 930, 3284, 1677, 3687, 2011, 4107, 4148, 4195, 2159, 1263, 2918, 2503}
sortByDistanceFrom(1200, xs)
fmt.Println(xs)
// [1192 1263 1347 930 1677 2011 2159 198 2312 2503 2781 2918 2920 3087 3284 3687 4107 4148 4195 4706]
}
func sortByDistanceFrom(x int, xs []int) {
sort.Slice(xs, func(i, j int) bool {
di := math.Abs(float64(x - xs[i]))
dj := math.Abs(float64(x - xs[j]))
return di < dj
})
}
請注意,此示例返回的第四個值是930,而不是示例輸出產(chǎn)生的1677,因為它計算了到目標數(shù)字(|1200-1677|=433 > |1200-930|=270)的絕對距離。如果您希望大于目標值而不是小于目標值,則必須相應地修改比較器功能。
- 1 回答
- 0 關注
- 414 瀏覽
添加回答
舉報