Rumah >pembangunan bahagian belakang >Golang >golang melaksanakan kamus python

golang melaksanakan kamus python

PHPz
PHPzasal
2023-05-13 10:20:38553semak imbas

Dalam pengaturcaraan, menggunakan kamus Python adalah salah satu struktur data yang sangat biasa, fungsi utamanya adalah untuk memetakan kunci kepada nilai. Apabila menggunakan Golang, kerana ia adalah bahasa yang ditaip secara statik, ia tidak menyokong jenis kamus seperti Python. Oleh itu, dalam beberapa senario adalah perlu untuk melaksanakan struktur data yang serupa dengan kamus Python. Artikel ini akan memperkenalkan cara melaksanakan kamus Python dalam Golang.

1. Melaksanakan kamus Python

Dalam Python, kamus kebanyakannya dilaksanakan menggunakan jadual cincang. Jadual cincang mempunyai kecekapan carian O(1) Apabila operasi seperti penyisipan, pemadaman dan carian diperlukan, jadual cincang boleh diselesaikan dengan cepat. Di Golang, struktur data yang serupa dengan kamus dalam Python boleh dilaksanakan melalui struktur dan peta.

  1. Pelaksanaan berdasarkan struktur

Dengan mentakrifkan struktur yang mengandungi struktur data pasangan nilai kunci, anda boleh mencapai fungsi yang serupa dengan kamus dalam Python . Kemudian, laksanakan kaedah yang sepadan, seperti sisipan, pemadaman dan fungsi carian, untuk menyelesaikan operasi kamus.

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)
}

Dalam kod di atas, struktur Dict mentakrifkan peta pasangan nilai kunci dan melaksanakan kaedah Set, Get, Remove, Contains dan Len. Antaranya, kaedah Set digunakan untuk memasukkan pasangan nilai kunci, kaedah Dapatkan digunakan untuk mendapatkan nilai mengikut kekunci, kaedah Alih keluar digunakan untuk memadam pasangan nilai kunci, kaedah Mengandungi digunakan untuk menentukan sama ada kunci tertentu terkandung, dan kaedah Len digunakan untuk mendapatkan panjang kamus.

  1. Dilaksanakan berdasarkan peta

Peta ialah jenis terbina dalam dalam Golang, dan lapisan bawahnya juga dilaksanakan menggunakan jadual cincang. Dengan menggunakan jenis peta, anda juga boleh mencapai fungsi yang serupa dengan kamus dalam 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)
}

Dalam kod di atas, alias Dict of type map[interface{}]interface{} ditakrifkan dan kaedah Set, Get, Remove, Contains dan Len dilaksanakan dalam struktur. Antaranya, kaedah Set digunakan untuk memasukkan pasangan nilai kunci, kaedah Dapatkan digunakan untuk mendapatkan nilai mengikut kekunci, kaedah Alih keluar digunakan untuk memadam pasangan nilai kunci, kaedah Mengandungi digunakan untuk menentukan sama ada kunci tertentu terkandung, dan kaedah Len digunakan untuk mendapatkan panjang kamus.

2. Kod ujian

Seterusnya, kami menulis kod ujian untuk mengesahkan sama ada kamus yang dilaksanakan mempunyai fungsi yang sepadan.

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())
    }
}

Kod ujian mengandungi dua bahagian, sepadan dengan kamus berdasarkan struktur dan pelaksanaan peta. Mula-mula, masukkan pasangan nilai kunci ke dalam kamus, kemudian dapatkan nilai dan sahkan sama ada nilai itu betul. Kemudian, padamkan pasangan nilai kunci dan sahkan sama ada panjang kamus telah berubah.

3. Ringkasan

Melalui contoh di atas, kita dapat melihat bahawa menggunakan struktur dan peta dalam Golang boleh mencapai fungsi yang serupa dengan kamus dalam Python. Kaedah pelaksanaan terutamanya berdasarkan struktur dan berdasarkan peta. Tidak kira kaedah pelaksanaan yang digunakan, perhatian perlu diberikan kepada isu seperti konflik cincang untuk memastikan kestabilan dan kecekapannya. Pada masa yang sama, kita juga boleh lebih memahami prinsip pelaksanaan dan kaedah penggunaannya dengan melaksanakan struktur data asas ini.

Atas ialah kandungan terperinci golang melaksanakan kamus python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:tali golang ke huruf besarArtikel seterusnya:tali golang ke huruf besar