type MyObject stringvar objects []MyObject我想對這些對象進行排序。標準庫有sort.Strings,但這需要一個[]string代替 的實例[]MyObject。我當前的解決方案是實現(xiàn)sort.Interface(如下所示)并使用sort.Sort,但我想擺脫該樣板代碼。有更好的方法嗎?type MyObjects []MyObjectfunc (objs MyObjects) Len() int { return len(objs)}func (objs MyObjects) Less(i, j int) bool { return strings.Compare(string(objs[i]), string(objs[j])) < 0}func (objs MyObjects) Swap(i, j int) { o := objs[i] objs[i] = objs[j] objs[j] = o}
2 回答

PIPIONE
TA貢獻1829條經(jīng)驗 獲得超9個贊
如果您的MyObject
類型是string
其基礎類型的“別名” ,則不能。在此處查看@JimB 的回答。
的底層類型MyObject
與的底層類型string
(它本身就是string
:)[]MyObject
相同,但 的底層類型與 的底層類型不同[]string
。
但是如果你碰巧重構了一點你的類型系統(tǒng),你的問題就會消失:
type MyObjects []string
var objects MyObjects
func main() {
objects = MyObjects{"abc", "aaa"}
sort.Strings(objects)
fmt.Println(objects)
}
輸出(在 上試試Go Playground):
[aaa abc]
為方便起見,Sort()如果您想,您甚至可以提供一個方法:
func (m MyObjects) Sort() {
sort.Strings(m)
}
并使用它:
objects = MyObjects{"abc", "aaa"}
objects.Sort()
fmt.Println(objects)
(輸出相同。)
- 2 回答
- 0 關注
- 185 瀏覽
添加回答
舉報
0/150
提交
取消