1. ホーム
  2. go

[解決済み] Goでマップをクリアするには?

2022-11-19 07:03:20

質問

c++の関数のようなものを探しています。 .clear() プリミティブ型に対して map .

それとも、代わりに新しいマップを作成した方がいいのでしょうか?

更新: ご回答ありがとうございました。回答を見て、新しいマップを作成すると、望ましくない不整合が発生する場合があることに気づきました。次のような例を考えてみてください。

var a map[string]string
var b map[string]string

func main() {
    a = make(map[string]string)
    b=a
    a["hello"]="world"
    a = nil
    fmt.Println(b["hello"])
}

というのは、やはりこれは .clear() 関数は、オブジェクト内のコンテンツをクリアします。

どのように解決するのですか?

おそらく、新しいマップを作成する必要があります。同じマップが複数のコード部分によって参照され、1 つの部分が明示的に値を消去する必要があり、この変更が他のコード部分に見える場合を除き、既存のものを消去しようと悩む本当の理由はありません。

というわけで、おそらく

mymap = make(map[keytype]valtype)


何らかの理由で既存のマップをクリアする必要がある場合、これは非常に簡単です。

for k := range m {
    delete(m, k)
}