第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在golang中排序int切片

在golang中排序int切片

Go
Qyouu 2021-04-09 15:15:09
說我有一個包含以下數(shù)字的整數(shù)切片:2781,4706,1347,1192,3087,2920,198,2312,930,3284,1677,3687,2011,4107,4148,4195,2159,1263,2918,2503我想根據(jù)它們離某個值的距離有多近對它們進行排序。例如,假設我的值是1200。我的切片經(jīng)過排序后將是:1192,1263,1347,1677,2011,2159,2312,2503,2781,2918,2920,3087,3284,3687,4107,4148,4195,4706,930,198我嘗試了以下方法:遍歷數(shù)組,減去指定的值,然后以升序排序,最終再次添加該值以返回到我的原始編號。這種方法并非在所有測試用例中都有效,而且由于對數(shù)組進行了變異,因此我知道它的壞習慣。
查看完整描述

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)的絕對距離。如果您希望大于目標值而不是小于目標值,則必須相應地修改比較器功能。


查看完整回答
反對 回復 2021-04-19
  • 1 回答
  • 0 關注
  • 414 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號