2 回答

TA貢獻1811條經驗 獲得超4個贊
您將不存在的索引傳遞給Swap(i, j).
地圖類型是復合的。它是根據另外兩種類型定義的:鍵類型和值類型。例子:
map[string]bool
在前面的例子中,string是鍵類型,bool是值類型。
您可能知道,地圖訪問返回 1 或 2 個值。在像您這樣的 1 返回值上下文中,當給定不存在的索引時,地圖訪問將返回地圖值類型的零值。
這意味著如果您訪問m["im_not_defined"]某個mtype 的地圖map[string]bool,您將獲得一個返回值,該值是bool(地圖的值類型)的零值。
您可以通過執(zhí)行(在 Swap 中)來檢查索引是否定義:
if a, k := t[uint32(i)]; k {
t[uint32(j)] = a
} else {
panic("undefined index")
}
類似地對于j.
所以基本上,如果i未定義,則將 的零值GeoNameTally分配給t[j]并導致您的“空”(零)值。
無論如何,如果你想對任何東西進行排序,你就必須使用切片。根據定義,地圖是無序的。

TA貢獻1802條經驗 獲得超5個贊
從 Go 1.8 開始,有一種更簡單的方法可以對切片進行排序,而無需您定義新類型。您只需創(chuàng)建一個 Less(匿名)lambda。
a := []int{5, 3, 4, 7, 8, 9}
sort.Slice(a, func(i, j int) bool {
return a[i] < a[j]
})
for _, v := range a {
fmt.Println(v)
}
- 2 回答
- 0 關注
- 174 瀏覽
添加回答
舉報