k-map 计算机语言,键值对(map、dict等)简单操作,多种语言实现(Python、Kotlin、C++、Golang)-Go语言中文社区...

一 目的

在编写程序时,本人使用第二多的数据结构是键值对,通过唯一的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() // 空不可变空map,因为没有初始化值,所以用处不大。

val mm = mutableMapOf() //可增删改查的mutable map,初始化为空。

Golang实现

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

//或者

m := map[string]int{}

C++实现:

map 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 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 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::iterator fiter = m2.find("加");

if(fiter != m2.end()) {

cout <

} else {

cout << "find not!"<< endl;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值