1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
通常 set 和 map 數(shù)據(jù)結(jié)構(gòu)需要比在普通數(shù)組或切片中存儲(chǔ)值列表更多的內(nèi)存,因?yàn)?set 和 map 提供了有效的附加功能,如唯一性或通過鍵檢索值。
如果您想要最少的內(nèi)存使用量,只需將它們存儲(chǔ)在一個(gè)切片中,例如[]Stuff
. 如果您在多個(gè)位置使用這些值,那么僅存儲(chǔ)它們的指針也可能是有利可圖的,例如[]*Stuff
,因此每個(gè)存儲(chǔ)相同Stuff
值的位置都可以存儲(chǔ)相同的指針(無需復(fù)制該值)。
如果您只想存儲(chǔ)唯一的結(jié)構(gòu)值,那么集合確實(shí)是最方便的選擇,在 Go 中使用map
.
沒有任何問題map[Stuff]struct{}
,它有效。對(duì)地圖鍵類型的要求:
該比較操作符==和=必須為鍵類型的操作數(shù)被完全定義!; 因此鍵類型不能是函數(shù)、映射或切片。
Stuff
是一個(gè)結(jié)構(gòu)體,如果滿足以下條件,Go 中的結(jié)構(gòu)體是可比的:
如果所有字段都具有可比性,則結(jié)構(gòu)值具有可比性。如果它們對(duì)應(yīng)的非空白字段相等,則兩個(gè)結(jié)構(gòu)值相等。
如果您的Stuff
結(jié)構(gòu)是您發(fā)布的內(nèi)容,則它是可比較的:它僅包含可比較類型的字段string
。
另請(qǐng)注意,如果您想要一個(gè)集合數(shù)據(jù)結(jié)構(gòu),如果您使用bool
作為值類型(例如map[Stuff]bool
)和true
作為值,則更清楚,然后您可以簡(jiǎn)單地使用索引來測(cè)試值是否在地圖中,因?yàn)樗饕磉_(dá)式產(chǎn)生如果鍵(在您的情況下)不在地圖中,則值類型(false
for bool
)的零值Stuff
,正確地告訴您要查找的值不在“集合”中。(如果它在地圖中,它的關(guān)聯(lián)true
值是索引表達(dá)式的結(jié)果 - 正確地告訴它在地圖中)。
- 1 回答
- 0 關(guān)注
- 193 瀏覽
添加回答
舉報(bào)