第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸地展平地圖golang

遞歸地展平地圖golang

Go
慕容708150 2022-12-19 18:15:24
使用下面的 json 我試圖將其展平以便于訪問。具有 2 個資源的示例在此結(jié)構(gòu)中可以有 n 個"config": {    "type": "r1",    "properties": {        "p1": "10",        "p2": "10"    },    "connected": [        {            "type": "r3",            "properties": {              "p1": "10",              "p2": "10"            },            "connected": [                {}        },    ],}自定義奉承邏輯func keyValuePairs(m interface{}) map[string]interface{} {    kvs := make(map[string]interface{})    if reflect.ValueOf(m).Kind() == reflect.Map {        mp, ok := m.(map[string]interface{})        if ok {            var key string            var value interface{}            for k, v := range mp {                switch k {                case "type":                    key = v.(string)                case "properties":                    value = v                case "connected":                    if collection, ok := v.([]interface{}); ok {                        for _, c := range collection {                            for nk, nv := range keyValuePairs(c) {                                nnv, _ := nv.(map[string]interface{})                                _, ok := nnv["connectedTo"]                                if !ok {                                   nnv["connectedTo"] = key                                }                                kvs[nk] = nv                            }                        }                    }                default:                    for nk, nv := range keyValuePairs(v) {                        kvs[nk] = nv                    }                }            }            if key != "" {                kvs[key] = value            }        } else {            for k, v := range m.(map[string]interface{}) {                kvs[k] = v            }        }    }    return kvs}所需的輸出有點波動,有些運行我得到了我需要的輸出,有些執(zhí)行“connectedTo”屬性為空。{"r1": {        "p1": "10",        "p2": "10"    },"r3" : {        "connectedTo": "r1",        "p1": "10",        "p2": "10"    },}我認為處決不是按順序執(zhí)行的。如果我錯了,請糾正我。
查看完整描述

1 回答

?
拉風的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

現(xiàn)在看看你的循環(huán):


var key string

var value interface{}

for k, v := range mp {

    switch k {

    case "type":

        key = v.(string)

    case "properties":

        value = v

    case "connected":

        if collection, ok := v.([]interface{}); ok {

            for _, c := range collection {

                for nk, nv := range keyValuePairs(c) {

                    nnv, _ := nv.(map[string]interface{})

                    _, ok := nnv["connectedTo"]

                    if !ok {

                       nnv["connectedTo"] = key

                    }

                    kvs[nk] = nv

                }

            }

        }

    default:

        for nk, nv := range keyValuePairs(v) {

            kvs[nk] = nv

        }

    }

}

您正在分支中使用key變量,但是達到和"connected"的順序是不確定的(隨機的)。"type""connected"


"type"分支是設(shè)置的key,但如果"connected"先到達,則為key空。


您不能依賴地圖迭代順序。


一個簡單的解決方法是在循環(huán)之前"type"首先獲取與first 關(guān)聯(lián)的值并將其分配給key(您在"connected"分支中使用的值) 。


例如:


key, _ := mp["type"].(string)

value := mp["properties"]

// Now process other properties:

for k, v := range mp {

    switch k {

    case "type", "properties": // Already handled

    case "connected":

        if collection, ok := v.([]interface{}); ok {

            for _, c := range collection {

                for nk, nv := range keyValuePairs(c) {

                    nnv, _ := nv.(map[string]interface{})

                    _, ok := nnv["connectedTo"]

                    if !ok {

                       nnv["connectedTo"] = key

                    }

                    kvs[nk] = nv

                }

            }

        }

    default:

        for nk, nv := range keyValuePairs(v) {

            kvs[nk] = nv

        }

    }

}


查看完整回答
反對 回復(fù) 2022-12-19
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號