日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFramegmap-基本使用

并發(fā)安全

?gmap?支持并發(fā)安全選項開關(guān),在默認(rèn)情況下是非并發(fā)安全的,開發(fā)者可以選擇開啟?gmap?的并發(fā)安全特性(傳遞初始化開關(guān)參數(shù)?safe?參數(shù)值為?true?, 必須在初始化時設(shè)定,不能運行時動態(tài)設(shè)定)。如:

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了尉氏免費建站歡迎大家使用!

m := gmap.New(true)

不僅僅是?gmap?模塊,?GOframe?框架的其他并發(fā)安全數(shù)據(jù)結(jié)構(gòu)也支持并發(fā)安全特性開關(guān)。

使用示例

基本使用

package main

import (
    "fmt"
    "github.com/gogf/gf/v2/container/gmap"
)

func main() {
    // 創(chuàng)建一個默認(rèn)的gmap對象,
    // 默認(rèn)情況下該gmap對象不支持并發(fā)安全特性,
    // 初始化時可以給定true參數(shù)開啟并發(fā)安全特性。
    m := gmap.New()

    // 設(shè)置鍵值對
    for i := 0; i < 10; i++ {
        m.Set(i, i)
    }
    // 查詢大小
    fmt.Println(m.Size())
    // 批量設(shè)置鍵值對(不同的數(shù)據(jù)類型對象參數(shù)不同)
    m.Sets(map[interface{}]interface{}{
        10 : 10,
        11 : 11,
    })
    fmt.Println(m.Size())

    // 查詢是否存在
    fmt.Println(m.Contains(1))

    // 查詢鍵值
    fmt.Println(m.Get(1))

    // 刪除數(shù)據(jù)項
    m.Remove(9)
    fmt.Println(m.Size())

    // 批量刪除
    m.Removes([]interface{}{10, 11})
    fmt.Println(m.Size())

    // 當(dāng)前鍵名列表(隨機排序)
    fmt.Println(m.Keys())
    // 當(dāng)前鍵值列表(隨機排序)
    fmt.Println(m.Values())

    // 查詢鍵名,當(dāng)鍵值不存在時,寫入給定的默認(rèn)值
    fmt.Println(m.GetOrSet(100, 100))

    // 刪除鍵值對,并返回對應(yīng)的鍵值
    fmt.Println(m.Remove(100))

    // 遍歷map
    m.Iterator(func(k interface{}, v interface{}) bool {
        fmt.Printf("%v:%v ", k, v)
        return true
    })

    // 自定義寫鎖操作
    m.LockFunc(func(m map[interface{}]interface{}) {
        m[99] = 99
    })

    // 自定義讀鎖操作
    m.RLockFunc(func(m map[interface{}]interface{}) {
        fmt.Println(m[99])
    })

    // 清空map
    m.Clear()

    // 判斷map是否為空
    fmt.Println(m.IsEmpty())
}

執(zhí)行后,輸出結(jié)果為:

10
12
true
1
11
9
[0 1 2 4 6 7 3 5 8]
[3 5 8 0 1 2 4 6 7]
100
100
3:3 5:5 8:8 7:7 0:0 1:1 2:2 4:4 6:6 99
true

有序遍歷

我們來看一下三種不同類型map的有序性遍歷示例。

package main

import (
    "fmt"
    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/container/gmap"
    "github.com/gogf/gf/v2/util/gutil"
)

func main() {
    array   := g.Slice{2, 3, 1, 5, 4, 6, 8, 7, 9}
    hashMap := gmap.New(true)
    listMap := gmap.NewListMap(true)
    treeMap := gmap.NewTreeMap(gutil.ComparatorInt, true)
    for _, v := range array {
        hashMap.Set(v, v)
    }
    for _, v := range array {
        listMap.Set(v, v)
    }
    for _, v := range array {
        treeMap.Set(v, v)
    }
    fmt.Println("HashMap   Keys:", hashMap.Keys())
    fmt.Println("HashMap Values:", hashMap.Values())
    fmt.Println("ListMap   Keys:", listMap.Keys())
    fmt.Println("ListMap Values:", listMap.Values())
    fmt.Println("TreeMap   Keys:", treeMap.Keys())
    fmt.Println("TreeMap Values:", treeMap.Values())
}

執(zhí)行后,輸出結(jié)果為:

HashMap   Keys: [4 6 8 7 9 2 3 1 5]
HashMap Values: [6 8 4 3 1 5 7 9 2]
ListMap   Keys: [2 3 1 5 4 6 8 7 9]
ListMap Values: [2 3 1 5 4 6 8 7 9]
TreeMap   Keys: [1 2 3 4 5 6 7 8 9]
TreeMap Values: [1 2 3 4 5 6 7 8 9]

FilterEmpty/FilterNil空值過濾

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	m1 := gmap.NewFrom(g.MapAnyAny{
		"k1": "",
		"k2": nil,
		"k3": 0,
		"k4": 1,
	})
	m2 := gmap.NewFrom(g.MapAnyAny{
		"k1": "",
		"k2": nil,
		"k3": 0,
		"k4": 1,
	})
	m1.FilterEmpty()
	m2.FilterNil()
	fmt.Println(m1.Map())
	fmt.Println(m2.Map())

	// Output:
	// map[k4:1]
	// map[k1: k3:0 k4:1]
}

Flip鍵值對反轉(zhuǎn)

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	var m gmap.Map
	m.Sets(g.MapAnyAny{
		"k1": "v1",
		"k2": "v2",
	})
	m.Flip()
	fmt.Println(m.Map())

	// May Output:
	// map[v1:k1 v2:k2]
}

Keys/Values鍵名/數(shù)值列表

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	var m gmap.Map
	m.Sets(g.MapAnyAny{
		"k1": "v1",
		"k2": "v2",
		"k3": "v3",
		"k4": "v4",
	})
	fmt.Println(m.Keys())
	fmt.Println(m.Values())

	// May Output:
	// [k1 k2 k3 k4]
	// [v2 v3 v4 v1]
}

Pop/Pops隨機出棧

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
	"github.com/gogf/gf/v2/frame/g"
)

func main() {
	var m gmap.Map
	m.Sets(g.MapAnyAny{
		"k1": "v1",
		"k2": "v2",
		"k3": "v3",
		"k4": "v4",
	})
	fmt.Println(m.Pop())
	fmt.Println(m.Pops(2))
	fmt.Println(m.Size())

	// May Output:
	// k1 v1
	// map[k2:v2 k4:v4]
	// 1
}

SetIfNotExist*判斷性寫入

判斷性寫入是指當(dāng)指定的鍵名不存在時則寫入并且方法返回?true?,否則忽略寫入并且方法返回?false?。相關(guān)方法如下:

  • ?SetIfNotExist ?
  • ?SetIfNotExistFunc ?
  • ?SetIfNotExistFuncLock?

方法具體描述請查看接口文檔或源碼注釋。

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
)

func main() {
	var m gmap.Map
	fmt.Println(m.SetIfNotExist("k1", "v1"))
	fmt.Println(m.SetIfNotExist("k1", "v1"))
	fmt.Println(m.Map())

	// Output:
	// true
	// false
	// map[k1:v1]
}

Merge字典表合并

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/container/gmap"
)

func main() {
	var m1, m2 gmap.Map
	m1.Set("key1", "val1")
	m2.Set("key2", "val2")
	m1.Merge(&m2)
	fmt.Println(m1.Map())

	// May Output:
	// map[key1:val1 key2:val2]
}

JSON序列化/反序列

?gmap?模塊下的所有容器類型均實現(xiàn)了標(biāo)準(zhǔn)庫json數(shù)據(jù)格式的序列化/反序列化接口。

1. Marshal

package main

import (
    "encoding/json"
    "fmt"
    "github.com/gogf/gf/v2/frame/g"

    "github.com/gogf/gf/v2/container/gmap"
)

func main() {
    m := gmap.New()
    m.Sets(g.MapAnyAny{
        "name":  "john",
        "score": 100,
    })
    b, _ := json.Marshal(m)
    fmt.Println(string(b))
}

執(zhí)行后,輸出結(jié)果:

{"name":"john","score":100}

2.Unmarshal

package main


import (
    "encoding/json"
    "fmt"
    "github.com/gogf/gf/v2/container/gmap"
)


func main() {
    m := gmap.Map{}
    s := []byte(`{"name":"john","score":100}`)
    json.Unmarshal(s, &m)
    fmt.Println(m.Map())
}

執(zhí)行后,輸出結(jié)果:

map[name:john score:100]

文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFramegmap-基本使用
新聞來源:http://m.5511xx.com/article/dpdcshd.html