golang的map[string][]string的技巧


類似於這種map slice結構,理論上基本都可以這么使用。

需求

替換或者修改切片中的數值,直接修改切片就好,不需要重新賦值。前提是不能改變切片大小。

代碼如下:

import (
    "fmt"
)

func CheckMaoSlice() {
    //初始化map[string][]string
    funcMap := map[string][]string{
        "1111":  []string{"2222", "333333"},
        "11115": []string{"2ooo222", "33ooo3333"},
    }
    fmt.Println(funcMap)//替換之前的打印
    funcMap1 := map[string]string{
        "2ooo222": "33333fefe",//切片中的數值按照這個映射替換
    }
     
    for _, funcSlice := range funcMap {//map遍歷
        for loc, funcName := range funcSlice {//[]string遍歷
            if v, ok := funcMap1[funcName]; ok {//替換切片中數值
                funcSlice[loc] = v
            }
        }
    }
    fmt.Println(funcMap)//替換之后的打印
}

輸入如下:

map[1111:[2222 333333] 11115:[2ooo222 33ooo3333]]
map[1111:[2222 333333] 11115:[33333fefe 33ooo3333]]

解析

funcSlice 這是一個string的切片,底層和funcMap[key]的值時共用一個地址的,所以直接修改funcSlice就能修改map中切片的值。就類似於如下代碼:

g:=[]string{11,2,3,4,45,6}
c=g[1:]

g和c目前有部分是公用的,修改c就能修改g,前提是不能擴容c。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM