複数のマップでの効率的なキーの存在チェック
Go では、キーを取得するための効率的なデータ構造であるマップを操作するのが一般的です。 -値のペア。ただし、開発者が提供したコードは、2 つの別個のマップ内のキーの存在を確認する必要があることを示しています。このプロセスをより簡潔にできるかどうかという疑問は残ります。
答えで説明したように、Go でキーの存在を確認するための特別な v, ok := m[k] 形式の使用は、単一変数の代入に限定されます。 。したがって、このフォームを使用して 2 つのチェックを 1 つの if 条件に結合することは現実的ではありません。
ただし、目的の機能を実現する別のアプローチもあります:
タプルの代入:
マップの値の型がインターフェイス型で、nil 値が使用されていないことを確認できる場合は、2 つの値を使用してタプルの代入を実行できます。インデックス式:
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 }
この関数は次のように使用できます。
if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); ok1 && ok2 { // ... }
これらのアプローチにより、単一の条件ステートメント内の複数のマップにキーが存在するかどうかを簡潔かつ効率的にチェックできます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3