ホームページ >バックエンド開発 >Golang >単一の条件で複数の Go マップにわたるキーの存在を効率的に確認するにはどうすればよいですか?

単一の条件で複数の Go マップにわたるキーの存在を効率的に確認するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-06 00:22:39990ブラウズ

How Can I Efficiently Check for Key Existence Across Multiple Go Maps in a Single Condition?

複数のマップにわたるキーの存在の確認

複数のマップを操作する場合、多くの場合、特定のキーがすべてのマップに存在するかどうかを確認する必要があります。彼ら。次のアプローチは一般的ですが、

if v1, ok1 := map1["aaa"]; ok1 {
    ...
}
if v2, ok2 := map2["aaa"]; ok2 {
    ...
}

には複数の if ステートメントが含まれます。 1 つの条件でこのチェックを実行するより簡潔な方法はありますか?

構文の圧縮の試行

考えられる解決策の 1 つは、両方のマップ内のキーの存在を評価してから、それらの交差を確認します:

v1, ok1 := map1["aaa"]
v2, ok2 := map2["aaa"]
if ok1 && ok2 {
    ...
}

ただし、このアプローチでは、2 つの別々の割り当てとチェックインが必要です。

単一条件キー チェックの制限

結局のところ、Go 言語では 1 つの if 条件で複数のキーの存在をチェックできません。 Go 仕様によれば、マップ上のインデックス式は、キーの有無を示す追加のブール値を生成します。この特別な構文は、代入または初期化でのみ使用できます。

したがって、特別な v, ok := m[k] 形式だけを使用して結合キーの存在チェックを実行することはできません。

キーの存在チェックの代替手段

マップの値の型がインターフェイス型の場合nil 値を持たないことを保証できる場合、別のアプローチはタプル代入を使用してキーの存在を確認することです。

if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
    ...
}

より複雑な場合には、キーをカプセル化するヘルパー関数を作成できます。存在チェックロジック:

func idx(m1, m2 map[string]interface{}, k string) (
    v1, v2 interface{}, ok1, ok2 bool) {

    v1, ok1 = m1[k]
    v2, ok2 = m2[k]
    return
}

// Usage example:
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 {
    ...
}

以上が単一の条件で複数の Go マップにわたるキーの存在を効率的に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。