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

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

為什么count++(而不是count = count + 1)改變了Golang中map返回的方式

為什么count++(而不是count = count + 1)改變了Golang中map返回的方式

Go
函數(shù)式編程 2021-11-15 15:18:50
我使用了一個映射,它使用句子中的單詞作為鍵,使用整數(shù)作為值。func WordCount(s string) map[string]int {    var m map[string]int    m = make(map[string]int)    var substrings[]string    count := 0    substrings = strings.Split(s, " ")    for i := range substrings {        count = count + 1        m[substrings[i]] = count    }    return m}func main() {       fmt.Println(WordCount("I am learning GO since some days"))}上面的代碼總是以正確的順序顯示地圖,即map[I:1 am:2 learning:3 GO:4 since:5 some:6 days:7]但如果我改變count = count + 1到count++輸出更改為:map[learning:3 GO:4 since:5 some:6 days:7 I:1 am:2]我知道地圖迭代在 Golang 中是隨機的,但為什么count = count + 1總是導(dǎo)致地圖迭代以與 相反的有序方式返回count++?
查看完整描述

1 回答

?
qq_花開花謝_0

TA貢獻1835條經(jīng)驗 獲得超7個贊

更改變量值的方式count與地圖元素的迭代順序無關(guān)。

沒有“正確”的迭代順序,迭代順序可以被認(rèn)為是隨機的(在當(dāng)前的實現(xiàn)中它隨機的)。引用語言規(guī)范:對于語句

地圖上的迭代順序沒有指定,并且不能保證從一次迭代到下一次迭代是相同的。

有關(guān)該主題的更多信息,請查看此答案:為什么 Go 不能按插入順序迭代映射?

Go Tour使用Go Playground提供代碼編輯器和運行器。Go Playground 緩存您在其上運行的代碼的輸出。運行兩次完全相同的代碼只會顯示緩存的輸出。

但是,如果您更改代碼,則會將其“視為”新代碼,它將被編譯和運行(并且其輸出將在之后緩存)。并且由于它是重新運行的,您可能會觀察到一個新的隨機順序 - 您會這樣做。

如果您再次更改代碼中的某些內(nèi)容,即使像添加或更改某些注釋一樣微不足道,輸出將(可能)再次更改,請嘗試。

有關(guān)如何實現(xiàn) Playground 的更多信息,請參閱博客文章Inside the Go Playground。

引用相關(guān)部分:

當(dāng)前端收到編譯請求時,它首先檢查memcache以查看它是否緩存了該源的先前編譯的結(jié)果。如果找到,則返回緩存的響應(yīng)。緩存可防止流行程序(例如Go 主頁上的程序)使后端過載。如果沒有緩存響應(yīng),前端向后端發(fā)出 RPC 請求,將響應(yīng)存儲在 memcache 中,解析播放事件,并將 JSON 對象作為 HTTP 響應(yīng)返回給客戶端(如上所述)。

另請注意,從Go 1.12開始,地圖在使用fmt包打印時進行排序(以簡化測試),因此現(xiàn)在打印相同的地圖將始終以相同的順序列出元素。迭代順序仍然故意保持不確定性。


查看完整回答
反對 回復(fù) 2021-11-15
  • 1 回答
  • 0 關(guān)注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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