Golang implementiert das Python-Wörterbuch

PHPz
Freigeben: 2023-05-13 10:20:38
Original
496 Leute haben es durchsucht

Bei der Programmierung ist die Verwendung des Python-Wörterbuchs eine der häufigsten Datenstrukturen, und ihre Hauptfunktion besteht darin, Schlüssel Werten zuzuordnen. Bei Verwendung von Golang werden Wörterbuchtypen wie Python nicht unterstützt, da es sich um eine statisch typisierte Sprache handelt. Daher ist es in manchen Szenarien notwendig, eine Datenstruktur ähnlich einem Python-Wörterbuch zu implementieren. In diesem Artikel wird erläutert, wie Sie das Python-Wörterbuch in Golang implementieren.

1. Python-Wörterbuch implementieren

In Python werden Wörterbücher hauptsächlich mithilfe von Hash-Tabellen implementiert. Die Hash-Tabelle hat eine Sucheffizienz von O(1). Wenn Vorgänge wie Einfügen, Löschen und Suchen erforderlich sind, kann die Hash-Tabelle schnell abgeschlossen werden. In Golang kann eine Datenstruktur ähnlich dem Wörterbuch in Python durch Strukturen und Karten implementiert werden.

  1. Basierend auf der Strukturimplementierung

Durch die Definition einer Struktur, die eine Datenstruktur von Schlüssel-Wert-Paaren enthält, können Sie so etwas wie Funktionen von erreichen Wörterbücher in Python. Implementieren Sie dann die entsprechenden Methoden wie Einfügungs-, Lösch- und Suchfunktionen, um Wörterbuchoperationen abzuschließen.

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) }
Nach dem Login kopieren

Im obigen Code definiert die Struktur Dict eine Karte von Schlüssel-Wert-Paaren und implementiert die Methoden Set, Get, Remove, Contains und Len. Unter diesen wird die Set-Methode zum Einfügen von Schlüssel-Wert-Paaren verwendet, die Get-Methode zum Abrufen des Werts gemäß dem Schlüssel, die Remove-Methode zum Löschen des Schlüssel-Wert-Paares und die Contains-Methode zum Bestimmen, ob Es ist ein bestimmter Schlüssel enthalten und die Len-Methode wird verwendet, um die Länge des Wörterbuchs zu ermitteln.

  1. Basierend auf der Kartenimplementierung

map ist ein integrierter Typ in Golang und seine unterste Ebene wird ebenfalls mithilfe einer Hash-Tabelle implementiert. Durch die Verwendung des Kartentyps können Sie auch ähnliche Funktionen wie Wörterbücher in Python erreichen.

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) }
Nach dem Login kopieren

Im obigen Code ist ein Alias-Dict vom Typ „map[interface{}]interface{} definiert und die Methoden „Set“, „Get“, „Remove“, „Contains“ und „Len“ sind in der Struktur implementiert. Unter diesen wird die Set-Methode zum Einfügen von Schlüssel-Wert-Paaren verwendet, die Get-Methode zum Abrufen des Werts gemäß dem Schlüssel, die Remove-Methode zum Löschen des Schlüssel-Wert-Paares und die Contains-Methode zum Bestimmen, ob Es ist ein bestimmter Schlüssel enthalten und die Len-Methode wird verwendet, um die Länge des Wörterbuchs zu ermitteln.

2. Testcode

Als nächstes schreiben wir den Testcode, um zu überprüfen, ob das implementierte Wörterbuch die entsprechende Funktion hat.

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()) } }
Nach dem Login kopieren

Der Testcode enthält zwei Teile, die dem Wörterbuch basierend auf der Struktur und der Kartenimplementierung entsprechen. Fügen Sie zuerst das Schlüssel-Wert-Paar in das Wörterbuch ein, rufen Sie dann den Wert ab und überprüfen Sie, ob der Wert korrekt ist. Löschen Sie dann ein Schlüssel-Wert-Paar und überprüfen Sie, ob sich die Wörterbuchlänge geändert hat.

3. Zusammenfassung

Anhand der obigen Beispiele können wir sehen, dass durch die Verwendung von Strukturen und Karten in Golang ähnliche Funktionen wie Wörterbücher in Python erreicht werden können. Die Implementierungsmethoden basieren hauptsächlich auf der Struktur und der Karte. Unabhängig davon, welche Implementierungsmethode verwendet wird, muss auf Probleme wie Hash-Konflikte geachtet werden, um deren Stabilität und Effizienz sicherzustellen. Gleichzeitig können wir durch die Implementierung dieser grundlegenden Datenstrukturen auch ihre Implementierungsprinzipien und Verwendungsmethoden besser verstehen.

Das obige ist der detaillierte Inhalt vonGolang implementiert das Python-Wörterbuch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!