我剛剛開始掌握 Go(兩天前開始,寫了不到 1000 行),我仍然想知道一些習語。我需要按長度降序對一段字符串進行排序。我確實喜歡這樣:func ... { ... do business ... sort.Sort(stringsLongestFirst(severalThousandStrings)) ... carry on and be happy, because it works ...}type stringsLongestFirst []stringfunc (b stringsLongestFirst) Len() int { return len(b) }func (b stringsLongestFirst) Less(i, j int) bool { return len(b[i]) > len(b[j]) }func (b stringsLongestFirst) Swap(i, j int) { b[j], b[i] = b[i], b[j] }首先,我想知道這是否是最慣用的方法。然后,最重要的是,我想知道在我編寫stringsLongestFirst(severalThousandStrings). 字符串切片是否以某種方式被巧妙地重新解釋為一種stringsLongestFirst類型,還是我必須計算一些復制開銷?
1 回答

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
您要轉換的類型既不是數字類型也不是字符串:[]string
并且stringsLongestFirst
是切片類型。
因此,轉換不會產生比復制切片標頭(12 或 24 字節,取決于字長)更多的開銷,這在將其打包為interface{}
變量以調用Sort
. 后備數組不會被復制,這就是為什么severalThousandStrings
在調用后似乎已排序。
- 1 回答
- 0 關注
- 188 瀏覽
添加回答
舉報
0/150
提交
取消