プログラミングにおいて、Python 辞書の使用は最も一般的なデータ構造の 1 つであり、その主な機能はキーを値にマップすることです。 Golang を使用する場合、Golang は静的に型付けされた言語であるため、Python のような辞書型をサポートしません。したがって、一部のシナリオでは、Python 辞書に似たデータ構造を実装する必要があります。この記事では、Golang で Python 辞書を実装する方法を紹介します。
1. Python 辞書の実装
Python では、主にハッシュ テーブルを使用して辞書を実装します。ハッシュテーブルの検索効率はO(1)であり、挿入、削除、検索などの操作が必要な場合、高速にハッシュテーブルを完成させることができます。 Golang では、Python の辞書に似たデータ構造を構造体とマップを通じて実装できます。
キーと値のペアのデータ構造を含む構造を定義することで、Python の辞書と同様の機能を実現できます。次に、挿入、削除、検索関数などの対応するメソッドを実装して、辞書操作を完了します。
type Dict struct { items map[interface{}]interface{} } func NewDict() *Dict { return &Dict{items: map[interface{}]interface{}{}} } func (d *Dict) Set(key, value interface{}) { d.items[key] = value } func (d *Dict) Get(key interface{}) (interface{}, bool) { value, ok := d.items[key] return value, ok } func (d *Dict) Remove(key interface{}) { delete(d.items, key) } func (d *Dict) Contains(key interface{}) bool { _, ok := d.items[key] return ok } func (d *Dict) Len() int { return len(d.items) }
上記のコードでは、構造体 Dict はキーと値のペアのマップを定義し、Set、Get、Remove、Contains、および Len メソッドを実装します。このうち、Set メソッドはキーと値のペアの挿入に使用され、Get メソッドはキーに応じた値の取得に使用され、Remove メソッドはキーと値のペアの削除に使用され、Contains メソッドはキーと値のペアの削除に使用されます。特定のキーが含まれており、Len メソッドを使用して辞書の長さを取得します。
map は Golang の組み込み型であり、その最下層もハッシュ テーブルを使用して実装されます。マップ型を利用することでPythonの辞書のような機能も実現できます。
type Dict map[interface{}]interface{} func NewDict() Dict { return make(map[interface{}]interface{}) } func (d Dict) Set(key, value interface{}) { d[key] = value } func (d Dict) Get(key interface{}) (interface{}, bool) { value, ok := d[key] return value, ok } func (d Dict) Remove(key interface{}) { delete(d, key) } func (d Dict) Contains(key interface{}) bool { _, ok := d[key] return ok } func (d Dict) Len() int { return len(d) }
上記のコードでは、map[interface{}]interface{} タイプのエイリアス Dict が定義されており、Set、Get、Remove、Contains、Len メソッドが構造内に実装されています。このうち、Set メソッドはキーと値のペアの挿入に使用され、Get メソッドはキーに応じた値の取得に使用され、Remove メソッドはキーと値のペアの削除に使用され、Contains メソッドはキーと値のペアの削除に使用されます。特定のキーが含まれており、Len メソッドを使用して辞書の長さを取得します。
2. テストコード
次に、実装した辞書に対応する機能があるかを検証するためのテストコードを書いてみましょう。
func TestDict(t *testing.T) { // 基于结构体实现字典 d := NewDict() d.Set(1, "hello") d.Set("world", "golang") if v, ok := d.Get(1); !ok || v != "hello" { t.Errorf("expect: hello but get: %v", v) } if v, ok := d.Get("world"); !ok || v != "golang" { t.Errorf("expect: golang but get: %v", v) } d.Remove("world") if d.Contains("world") { t.Errorf("should not contain key: world") } if d.Len() != 1 { t.Errorf("expect length: 1 but get: %v", d.Len()) } // 基于map实现字典 dict := NewDict() dict.Set(1, "hello") dict.Set("world", "golang") if v, ok := dict.Get(1); !ok || v != "hello" { t.Errorf("expect: hello but get: %v", v) } if v, ok := dict.Get("world"); !ok || v != "golang" { t.Errorf("expect: golang but get: %v", v) } dict.Remove("world") if dict.Contains("world") { t.Errorf("should not contain key: world") } if dict.Len() != 1 { t.Errorf("expect length: 1 but get: %v", dict.Len()) } }
テスト コードには、構造とマップの実装に基づく辞書に対応する 2 つの部分が含まれています。まず、キーと値のペアをディクショナリに挿入し、次に値を取得して、値が正しいかどうかを確認します。次に、キーと値のペアを削除し、辞書の長さが変更されたかどうかを確認します。
3. 概要
上記の例を通じて、Golang で構造とマップを使用すると、Python の辞書と同様の機能を実現できることがわかります。実装方法は主に構造ベースとマップベースです。どの実装方法を使用する場合でも、その安定性と効率性を確保するには、ハッシュの競合などの問題に注意を払う必要があります。同時に、これらの基本的なデータ構造を実装することで、その実装原理や使用方法をより深く理解することもできます。
以上がgolang は Python 辞書を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。