欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang 使用Map實現(xiàn)去重與set的功能操作

 更新時間:2021年04月29日 14:45:35   作者:潘廣宇 Leo  
這篇文章主要介紹了Golang 使用 Map 實現(xiàn)去重與 set 的功能操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

假設現(xiàn)在有一個需求

將以下 url 保存起來,要求不重復

www.baidu.com
www.sina.com.cn
www.hao123.com
www.baidu.com
www.hao123.com

可以利用 map 的 key 唯一性的問題處理

package main 
var set = map[string]bool { 
}
 
func main() {
    ...
    url := xxx
    if set[url] {
        // 表示集合中已經存在
        return
    }
 
    set[url] = true           // 否則如果不存在,設置為true
}
 

// 完成后,set的所有的key值為不重復的值

在此之前,需要確定 golang 支持的 map 的 key 數(shù)量

可以手寫暴力寫入測試

package main 
import (
 "fmt"
)
 
var test = map[int]int { 
}
 
func main() {
 for i := 0; i < 10000000; i++ {        // 測試對1000萬key的支持,完美支持
  fmt.Println(i)
  test[i] = i
 }
}
 

補充:golang map/set類型

map類型

1. 基礎特性

map是一種無序的鍵值對的集合; 所以可以類似數(shù)組/slice一樣進行迭代

map的值可以使內建類型, 也可以是struct類型

內部使用hash表實現(xiàn), map的hash表包含了一個collection of buckets(桶集合)

2. 聲明與初始化

package main
import (
    "fmt"
)
// map[keyType]valueType
func initMap() {
    // 通過make方法創(chuàng)建
    dict := make(map[string]int)
    dict["age"] = 18
    // 直接創(chuàng)建
    dict2 := map[string]string{"name":"xiaoming", "phone":"135xxx"}
    dict2["addr"] = "Guangzhou"
    fmt.Printf("%v\n", dict2)
}
func main() {
    initMap()
}

3. 元素訪問

package main
import (
    "fmt"
)
type Student struct {
    name string
    grade int
}
func useMap() {
    //使用前應該先初始化, 否則panic報錯
    // var map1 map[string]string
    // map1["a"] = "b" // will panic
    map1 := make(map[string]Student)
    map1["s1"] = Student{name:"xiaomo", grade:1}
    fmt.Printf("%v\n", map1)
}
func main() {
    useMap()
}

4. 在函數(shù)中傳遞map

在函數(shù)間傳遞map對象, 是傳遞引用而不是拷貝; 因此在函數(shù)中對map進行了修改, 引用到它的地方也會相應修改

package main
import (
    "fmt"
)
type Student struct {
    name string
    grade int
}
func useMap() {
    map1 := make(map[string]Student)
    map1["s1"] = Student{name:"xiaomo", grade:1}
    // 作為函數(shù)參數(shù)傳遞
    printMap(map1)
}
func printMap(m map[string]Student) {
    fmt.Printf("currentMap: %v\n", m)
}
func main() {
    useMap()
}

Set類型

golang沒有內置Set類型, 可以自定義實現(xiàn)。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • 快速升級Go版本(幾分鐘就搞定了)

    快速升級Go版本(幾分鐘就搞定了)

    go現(xiàn)在的更新速度是非常的快啊,用著用著網上的教程就不配套了,下面這篇文章主要給大家介紹了關于快速升級Go版本的相關資料,文中介紹的方法幾分鐘就搞定了,需要的朋友可以參考下
    2024-05-05
  • Go1.21新增slices包中函數(shù)的用法詳解

    Go1.21新增slices包中函數(shù)的用法詳解

    Go?1.21新增的?slices?包提供了很多和切片相關的函數(shù),可以用于任何類型的切片,本文為大家整理了部分函數(shù)的具體用法,感興趣的小伙伴可以了解一下
    2023-08-08
  • Golang實現(xiàn)超時退出的三種方式

    Golang實現(xiàn)超時退出的三種方式

    這篇文章主要介紹了Golang三種方式實現(xiàn)超時退出,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Go壓縮位圖庫roaring安裝使用詳解

    Go壓縮位圖庫roaring安裝使用詳解

    這篇文章主要為大家介紹了Go壓縮位圖庫roaring安裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 基于golang時間轉換的問題

    基于golang時間轉換的問題

    下面小編就為大家?guī)硪黄趃olang時間轉換的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Go?語言使用goroutine運行閉包踩坑分析

    Go?語言使用goroutine運行閉包踩坑分析

    這篇文章主要介紹了Go?語言使用goroutine運行閉包踩坑解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • k8s容器互聯(lián)-flannel?host-gw原理篇

    k8s容器互聯(lián)-flannel?host-gw原理篇

    這篇文章主要為大家介紹了k8s容器互聯(lián)-flannel?host-gw原理篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 如何編寫Go語言中間件的實例教程

    如何編寫Go語言中間件的實例教程

    不知道大家有沒有寫過中間件呢,它是怎么寫的呢?下面這篇文中就來給大家分享一下使用Go,如何編寫中間件,文中通過示例代碼介紹的非常詳細,供大家參考學習,下面隨著小編來一起學習學習吧。
    2018-04-04
  • Go設計模式之觀察者模式圖解

    Go設計模式之觀察者模式圖解

    觀察者模式是一種行為設計模式, 允許你定義一種訂閱機制, 可在對象事件發(fā)生時通知多個 “觀察” 該對象的其他對象,下面這篇文章主要給大家介紹了關于圖解Go觀察者模式的相關資料,需要的朋友可以參考下
    2023-07-07
  • go等待一組協(xié)程結束的操作方式

    go等待一組協(xié)程結束的操作方式

    這篇文章主要介紹了go等待一組協(xié)程結束的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論