Golang将Map的键值对调的实现示例

目录
  • 一、Map是什么?
  • 二、详细代码
    • 1.对调键值
    • 2.进行调用
  • 总结
  • PS:golang无序的键值对集合map

一、Map是什么?

map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型

二、详细代码

1.对调键值

Map原数据:

moMap := map[string]int{
        "张三": 21, "李四": 56, "王五": 23,
        "赵六": 45, "周七": 32, "陈八": 21,
        "许九": 21, "王十": 16, "吴三": 45,
        "郑六": 23, "许七": 43, "李三": 16,
    }

具体代码如下(示例):

// 键值对调 
// 传入参数:moMap map[string]int
// 返回值: map[int][]string
func reserveMap(moMap map[string]int) map[int][]string {
    // 建立一个 resMap 与 moMap 容量相同
    // 由于对调可能存在多个值对应一个Key
    // string 需转为 切片[]string
    resMap := make(map[int][]string, len(moMap))

    // 通过for range 遍历 moMap
    // k 即为 Key v 即为 Value
    for k, v := range moMap {
        // 由于现在对应为 切片[]string
        // 使用 append 达到添加多个的效果
        resMap[v] = append(resMap[v], k)
    }
    
    // 程序结束
    return resMap
}

2.进行调用

详细代码如下(示例):

package main

import (
    "fmt"
)

func main() {
    moMap := map[string]int{
        "张三": 21, "李四": 56, "王五": 23,
        "赵六": 45, "周七": 32, "陈八": 21,
        "许九": 21, "王十": 16, "吴三": 45,
        "郑六": 23, "许七": 43, "李三": 16,
    }

    // 打印对调前
    for k, v := range moMap {
        fmt.Printf("Key: %v, Value: %v \n", k, v)
    }

    resMap := reserveMap(moMap)

    fmt.Println("reserve:")
    // 打印对调后
    for k, v := range resMap {
        fmt.Printf("Key: %v, Value: %v \n", k, v)
    }
}

// 键值对调
// 传入参数:moMap map[string]int
// 返回值: map[int][]string
func reserveMap(moMap map[string]int) map[int][]string {
    // 建立一个 resMap 与 moMap 容量相同
    // 由于对调可能存在多个值对应一个Key
    // string 需转为 切片[]string
    resMap := make(map[int][]string, len(moMap))

    // 通过for range 遍历 moMap
    // k 即为 Key v 即为 Value
    for k, v := range moMap {
        // 由于现在对应为 切片[]string
        // 使用 append 达到添加多个的效果
        resMap[v] = append(resMap[v], k)
    }

    // 程序结束
    return resMap
}

总结

键值的简单调换是熟悉Golang Map 数据类型的前奏。

PS:golang 无序的键值对集合map

package main

import "fmt"

func main() {
     /*创建集合并初始化 */
    countryCapitalMap := make(map[string]string)

    /* map插入key - value对,各个国家对应的首都 */
    countryCapitalMap [ "France" ] = "巴黎"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"

    /*使用键输出value值 */
    for country := range countryCapitalMap {
        fmt.Println(country, "首都是", countryCapitalMap [country])
    }

    /*查看元素在集合中是否存在 */
    capital, ok := countryCapitalMap [ "American" ] /*如果确定是真实的,则存在,否则不存在 */
    /*fmt.Println(capital) */
    /*fmt.Println(ok) */
    if (ok) {
        fmt.Println("American 的首都是", capital)
    } else {
        fmt.Println("American 的首都不存在")
    }
}

到此这篇关于Golang将Map的键值对调的实现示例的文章就介绍到这了,更多相关Golang Map键值对调 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • golang 实现对Map进行键值自定义排序

    看代码吧~ //自定义结构体,用来自定义排序 type RecentlyUpdateListMapSorter []map[string]interface{} //根据MapSorter.Keys进行倒序排序 func (ms *RecentlyUpdateListMapSorter) SortReverse() { sort.Sort(sort.Reverse(ms)) } //自定义排序方法(Len(),Less(),Swap()) func (ms *RecentlyUpdateList

  • Go语言遍历map实现(访问map中的每一个键值对)

    map 的遍历过程使用 for range 循环完成,代码如下: scene := make(map[string]int) scene["route"] = 66 scene["brazil"] = 4 scene["china"] = 960 for k, v := range scene { fmt.Println(k, v) } 遍历对于Go语言的很多对象来说都是差不多的,直接使用 for range 语法即可,遍历时,可以同时获得键和值

  • Golang将Map的键值对调的实现示例

    目录 一.Map是什么? 二.详细代码 1.对调键值 2.进行调用 总结 PS:golang无序的键值对集合map 一.Map是什么? map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构.map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型 二.详细代码

  • C++中vector可以作为map的键值实例代码

    因为项目中需要根据状态找到一个对应的结果,就采用了map的结构,但是状态本身较为复杂,存在一个vector中.上次使用map的经验是自定义类类型作为键值必须重载<操作符,因为map的快速查找是基于红黑树的构建,因而键值必须能相互之间比较.所以担心vector作为类类型的键值会引发一些错误,就写了一个例子测试.结果证明vector可以直接作为map的键值使用. #include<iostream> #include<string> #include<vector>

  • Map获取键值,Map的几种遍历方法总结(推荐)

    Map获取键值 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对. SortedMap---扩展Map,使按键保持升序排列 关于怎么使用,一般是选择Map的子类,而不直接用Map类. 下面以HashMap为例 public static void main(String args[]) { HashMap hashmap =new HashMap();

  • springboot代码,注解配置获取yml,properties文件的map即键值对

    目录 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 properties 获取自定义键值对 properties配置应用,为什么需要使用properties文件 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 yml中的键值对 test:   map:     key1: value1     key2: value2     key3: value3 pom中的依赖配置 <dependency>     <gro

  • Flutter的键值存储数据库使用示例详解

    目录 Flutter 键值存储数据库 unqlite unqlite_flutter 快速上手 简单键值对存储 JSON 为什么你应该使用unqlite_flutter? Flutter 键值存储数据库 键值存储是开发中十分常见的需求,在Flutter开发中,一般使用 shared_preferences 插件来实现.shared_preferences 本质上就是将键值对保存到一个XML文件中进行持久化. 而shared_preferences 实际上存在一定缺陷,譬如其性能较差,不适合处理大

  • Java 把json对象转成map键值对的方法

    工具方法: 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 maven 引用jar包版本: <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20090211</version> </dependency> 工具类: package com.baofoo.admin.test; /

  • Java将json对象转换为map键值对案例详解

    本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 比如json数据如下: {responseHeader:{status:0,QTime:0},spellcheck:{suggestions:{中国:{numFound:9,startOffset:0,endOffset:2,suggestion:[中国工商银行, 中国人民, 中国国际, 中国农业, 中国市场, 中国经济, 中国人, 中国广播, 中国文化]}},collations:{collation:中国工商银行}}} 如

  • Go语言for range(按照键值循环)遍历操作

    Go 语言可以使用 for range 遍历数组.切片.字符串.map 及通道(channel).通过 for range 遍历的返回值有一定的规律: 数组.切片.字符串返回索引和值. map 返回键和值. 通道(channel)只返回通道内的值. 遍历数组.切片--获得索引和元素 在遍历代码中,key 和 value 分别代表切片的下标及下标对应的值.下面的代码展示如何遍历切片,数组也是类似的遍历方法: for key, value := range []int{1, 2, 3, 4} { f

  • Js遍历键值对形式对象或Map形式的方法

    最近在项目中使用ajax返回的是一个map对象,怎么遍历这个map对象?去网上查了好多,真正有用很少,终于让我想起自己以前一个需要遍历key=Value形式的对象,想了想这种方式,应该也对于map适用吧.所以试了下,成功了!记录下来以备后用. 在JS中如何遍历key=value键值对,对象的数据(也可以是map形式). for ( var key in changes) { //通过遍历对象属性的方法,遍历键值对,获得key,然后通过 对象[key]获得对应的值 name = key; valu

随机推荐