zoukankan      html  css  js  c++  java
  • 键值对(map、dict等)简单操作,多种语言实现(Python、Kotlin、C++、Golang)

    一 目的

    在编写程序时,本人使用第二多的数据结构是键值对,通过唯一的key来索引一个可以更加“精密”数据结构。总结来说,在我的产品中,应用较多的两个场景分别是:

    • 通过key-value返回context,例如使用django、spring boot等框架编写后端;
    • 存储大量的结构化信息,通过唯一的key索引,快速访问。
      各种编程语言都有实现key-value数据结构,现在介绍如下。

    二 创建key-value

    创建空的key-values,可在后续的代码逻辑中插入数据。一般用于读取外部的数据。
    Python实现:

    #coding=utf8
    
    from __future__ import print_function, division
    from typing  import Dict
    
    d1 = {} # type: Dict[unicode, int] # 创建一个空的字典,key类型为unicode,value为int。
    

    kotlin实现:

        val m = mapOf<String, Int>() // 空不可变空map,因为没有初始化值,所以用处不大。
        val mm = mutableMapOf<String, Int>() //可增删改查的mutable map,初始化为空。
    

    Golang实现

    	var m = make(map[string]int) // 创建空的map,size为0。
            //或者
            m := map[string]int{}
    

    C++实现:

    map<string, int> m;
    

    创建带有初始化列表的key-values。一般用于后端向前端返回context或者简单的demo。
    Python实现:

    d2 = {u'甲': 1, u'乙':2} # type: Dict[unicode, int] # 创建带有初始化键值对的字典
    

    Kotlin实现:

        val m2 = mapOf("甲" to 1, "乙" to 2) //值初始化之后,不可增删改查。
        val mm2 = mutableMapOf("甲" to 1, "乙" to 2) // 值初始化之后,后续可根据情况增删改查。
    

    Golang实现:

    	var m2 = map[string]int{
    		"甲": 1,
    		"乙": 2,
    	}
    

    C++实现:

        map<string, int> m2 = { // cpp11
            {"甲", 1},
            {"乙", 2}
        };
    

    三 插入新的key-value值

    Python实现:

    
    keys = [u'丙', u'丁']
    for k in keys:
        d2[k] = 3 # 插入新值,如果存在则覆盖,如果不存在则创建
    

    Kotlin实现

        val keys = listOf("丙", "丁")
        for (key in keys) { // 依次插入一个
            mm2[key] = 3
        }
        // 或者依次插入全部的pairs
        mm2.putAll(listOf(Pair("丙",3 ), Pair("丁", 4)))
    

    Golang实现

    	var keys = []string{"丙", "丁"}
    	for i := range keys {
    		m2[keys[i]] = 3 // 如果不存在key,则会闯进新的key,否则会将之前的value覆盖。
    	}
    

    C++实现:

        vector<string> keys{"丙", "丁"};
        for(auto key : keys) {
            m2[key] = 3; // 如果存在key,则覆盖之前的值,否则创建新的key,插入value。
        }
        // 或者
        m2.insert(make_pair("戊", 5)); // 如果不存在key,则创建新的key,插入value,否则什么也不做。
    

    四 删除key-value

    Python代码,删除指定key:

    del d2[u'甲']
    # 或者
    a = d2.pop(u'乙') # a为key对应的value。
    

    如果不存在,则会抛出KeyError异常。

    Kotlin代码,删除指定key:

        mm2.remove("甲") // 删除key,如果key不存在,则什么也不影响。
    

    Golang代码,删除指定key:

    	delete(m2, "丙") //如果key不存在什么都不做
    

    C++代码,删除指定的key:

    m2.erase("甲"); //如果key不存在什么都不做
    

    Python代码,清空所有:

    d2.clear()
    

    Kotlin代码,清空所有:

        mm2.clear()
    

    Golang代码,清空所有:

    	for k := range m2 {
    		delete(m2, k)
    	}
            // 或者
          m2 = make([string]int) // 垃圾回收会清除之前的所有数据。
    

    C++代码,清空所有:

        m2.clear();
    

    五 赋值

    Python代码:

    d2[u'戊'] = 5 # 如果存在key则会更新其值,不存在则创建新的,并赋值。
    

    Kotlin代码:

    mm2[u'戊'] = 5 # 如果存在key则会更新其值,不存在则创建新的,并赋值。
    

    Golang代码:

    m2["戊"] = 5 // 如果存在key则会更新其值,不存在则创建新的,并赋值。
    

    C++代码:

    m2["戊"] = 3; // 如果存在key,则覆盖之前的值,否则创建新的key,插入value。
    // 或者
    m2.insert(make_pair("戊", 5)); // 如果不存在key,则创建新的key,插入value,否则什么也不做。
    

    六 访问

    Python代码:

    v = d2[u'甲'] # 如果key不存在,则会抛出KeyError异常。
    

    Kotlin代码:

        val v = mm2["甲"] // 如果key存在,则返回对应的value,否则返回null。
    

    Golang

    	var v = m2["乙"] // 如果key存在,则返回对应的value,否则返回类型的默认值
    

    C++代码:

    m2["甲"] // 如果key存在,则返回对应的value,否则返回类型的默认值
    

    七 判断是否存在key

    Python代码:

    d2.has_key(u'甲')
    #或者
    if u'甲' in d2:
        print(d2[u'甲'])
    if u'甲' not in d2:
        d2[u'甲'] = 1
    

    Kotlin代码:

        mm2.contains("甲") //是否存在key
        mm2.containsKey("甲") // 是否存在key
        mm2.containsValue(1) // 是否存在value
    

    Golang代码:

      i, ok := m2["甲"]
      _, ok := m2["甲"] // ok==true, 存在,否则不存在
    

    C++代码:

        map<string, int>::iterator fiter = m2.find("加");
        if(fiter != m2.end()) {
            cout <<"find it!" << endl;
        } else {
            cout << "find not!"<< endl;
        }
    
  • 相关阅读:
    PHP面向对象——类
    PHP强大的数组函数
    php学习资源
    版本管理(二)之Git和GitHub的连接和使用
    版本管理(一)之Git和GitHub的区别(优点和缺点)
    (win10)Wamp环境下php升级至PHP7.2
    wamp3.1.0 X64下载链接
    4.总结近5周以来的github上的工作情况,以图表方式分析你小组的工作情况、存在的问题及解决的方案。(尤心心)
    四则运算需求分析和功能实现--杨宇杰
    1.对四则运算软件需求的获取方式进行实践,例如使用调查问卷访问相关关系人等。
  • 原文地址:https://www.cnblogs.com/ledao/p/15085580.html
Copyright © 2011-2022 走看看