猿问

如何在 go lang 中对 map[string]interface{} 类型进行多重排序?

场景:考虑我在去朗现在我要处理的JSON数据现在用map[string]interface{}使用的封装类型encoding/json做marshal/unmarshal


以下是 JSON 数据:


{

    "MysoreCity": {

        "Population": 1000,

        "VehicleCount": 1700,

        "Temperature": 33

    },

    "BangaloreCity": {

        "Population": 1000,

        "VehicleCount": 3500,

        "Temperature": 33

    },

    "KolarCity": {

        "Population": 1250,

        "VehicleCount": 3500,

        "Temperature": 31

    },

    "TumkurCity": {

        "Population": 800,

        "VehicleCount": 300,

        "Temperature": 29

    }

}

现在我想根据优先级执行多排序降序,比如优先级是Temperature, Population,VehicleCount然后我希望输出像


{

    "BangaloreCity": {

        "Population": 1000,

        "VehicleCount": 3500,

        "Temperature": 33

    },

    "MysoreCity": {

        "Population": 1000,

        "VehicleCount": 1700,

        "Temperature": 33

    },

    "KolarCity": {

        "Population": 1250,

        "VehicleCount": 3500,

        "Temperature": 31

    },

    "TumkurCity": {

        "Population": 800,

        "VehicleCount": 300,

        "Temperature": 29

    }

}

因此,根据一些动态的优先级集进行排序。


问题:我没有得到任何关于如何在 go lang 中对其进行排序的线索。我是 lang 新手,在搜索对我的数据进行排序时发现了一些东西;如下所述(来源:链接)


使用范围循环遍历地图时,未指定迭代顺序,并且不能保证从一次迭代到下一次迭代顺序相同。


问题:谁能解释一下如何使用类似的 JSON 数据进行这种排序?


温温酱
浏览 437回答 2
2回答

慕娘9325324

我做了这个函数从 N 个映射和它的排序键中获取结果映射。func getSortedKeys(maps ...map[string]string) (map[string]string, []string) {    var keys []string    resultMap := map[string]string{}    for _, currMap := range maps {        for k, v := range currMap {            resultMap[k] = v            keys = append(keys, k)        }    }    sort.Strings(keys)    return resultMap, keys}在函数之外,您可以执行以下操作:  concatenedMaps, keys := getSortedKeys(map1,map2)  for _, k := range keys {        value := concatenedMaps[k]  }
随时随地看视频慕课网APP

相关分类

Go
我要回答