我剛剛開始掌握 Go(兩天前開始,寫了不到 1000 行),我仍然想知道一些習(xí)語(yǔ)。我需要按長(zhǎng)度降序?qū)σ欢巫址M(jìn)行排序。我確實(shí)喜歡這樣: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類型,還是我必須計(jì)算一些復(fù)制開銷?
1 回答

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