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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

檢查存儲(chǔ)大值的映射中是否存在鍵

檢查存儲(chǔ)大值的映射中是否存在鍵

Go
紫衣仙女 2022-10-24 10:17:59
要知道k映射中存在的鍵M1[k]v非常簡(jiǎn)單Go。if v, ok := M1[k]; ok {     // key exist    }'v' : 非指針類(lèi)型的值。如果v很大,僅使用上述方法檢查特定鍵是否存在效率不高,因?yàn)樗鼤?huì)將值加載到v內(nèi)存中(即使我根據(jù)我的理解使用空白標(biāo)識(shí)符_代替,v如果我的這里的理解是錯(cuò)誤的)。是否有一種有效的方法可以檢查 Map 中是否存在鍵(無(wú)需讀取/或在內(nèi)存中分配值)?我正在考慮創(chuàng)建一個(gè)新地圖M2[k]bool來(lái)存儲(chǔ)信息并在M2每次插入內(nèi)容時(shí)在M1.
查看完整描述

1 回答

?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

使用if _, ok := M1[k]; ok { }. 如果您使用空白標(biāo)識(shí)符,則不會(huì)“加載”該值。


讓我們編寫(xiě)基準(zhǔn)測(cè)試來(lái)測(cè)試它:


var m = map[int][1_000_000]int64{

    1: {},

}


func BenchmarkNonBlank(b *testing.B) {

    for i := 0; i < b.N; i++ {

        if v, ok := m[1]; ok {

            if false {

                _ = v

            }

        }

    }

}


func BenchmarkBlank(b *testing.B) {

    for i := 0; i < b.N; i++ {

        if _, ok := m[1]; ok {

            if false {

                _ = ok

            }

        }

    }

}

運(yùn)行g(shù)o test -bench .,輸出為:


BenchmarkNonBlank-8         1497            763278 ns/op

BenchmarkBlank-8        97802791                12.09 ns/op

如您所見(jiàn),使用空白標(biāo)識(shí)符,該操作大約需要 10 ns。當(dāng)我們將值分配給非空白標(biāo)識(shí)符時(shí),當(dāng)值類(lèi)型的大小約為 8 MB 時(shí),它幾乎是 1 毫秒(幾乎慢了十萬(wàn)倍)。


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 1 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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