当前位置:网站首页>CAPL中的键值对(hash)数据类型
CAPL中的键值对(hash)数据类型
2022-07-30 01:10:00 【蚂蚁小兵】
- 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入【相亲相爱一家人】
- 玩转CANoe,博客目录大全,点击跳转
前言
键值对(Key - Value)又名哈希(hash),各种编程语言都会有的一种数据类型,Python中叫字典,CAPL中叫 语义场联想(Associative fields ),本节想通过Python和CAPL的角度讲解下key-value的使用
演示软硬件环境
Windows11 x64;CANoe 11 SP2 x64

CAPL和Python的简单对比
1️⃣ python下是字典的数据类型,通过花括号定义,可以初始化
- 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
tinydict = {
'Name': 'Zara', 'Age': 7, 'sex': 'boy'}# 定义字典并初始化
tinydict['Age'] = 8 # 更新
tinydict['School'] = "RUNOOB" # 添加
print( "tinydict['Age']: ", tinydict['Age'])
print( "tinydict['School']: ", tinydict['School'])
2️⃣ CAPL中叫Associative fields ,定义方法如下
- capl定义如下图,key,value的数据类型可以是: long, int64, float, double, enumeration types and char[].
- 不像python,在同一个变量中,value可以是整形,也可以是字符串,CAPL中,只能是同一种数据类型

- 下面代码key 和value 都是 字符串类型的
on key 'a'
{
char[20] tinydict[char []];
strncpy(tinydict["Name"], "Zara", 20);
strncpy(tinydict["Age"], "7", 20);
strncpy(tinydict["sex"], "boy", 20);
for (char[] mykey : tinydict)
{
write("%s is mapped to %s", mykey, tinydict[mykey]);
}
}
- 输出结果:
Age is mapped to 7
Name is mapped to Zara
sex is mapped to boy
- 下面代码key 字符串类型的,Value是long类型
on key 'b'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
for (char [] mykey : setSignal)
{
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
}
3️⃣ 特殊的for 语句
- 这个for 循环是特殊的,就是这个结构 char[] 是key的数据类型;mykey,可以随意定义,代表key;setSignal是keyvalue 变量名
- for循环所以是按照key的升序来的,仔细看下上面打印输出,Age ,Name ,sex先后打印出来,并不是按照赋值的顺序。
for (char [] mykey : setSignal)
{
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
- 可以在循环中增加或者更改 value的
on key 'b'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
for (char [] mykey : setSignal)
{
if (setSignal[mykey] == 80)
{
setSignal[mykey] = 90;
setSignal["drivemode"] = 7;
}
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
}
4️⃣ 作为函数参数传递
on key 'c'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
write("调用函数之前:");
for (char [] mykey : setSignal)
{
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
printMap(setSignal);
write("调用函数之后:");
for (char [] mykey : setSignal)
{
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
}
void printMap(long m[char []])
{
for (char [] mykey : m)
{
if (m[mykey] == 80)
{
m[mykey] = 90;
m["drivemode"] = 7;
}
}
}
- 输出结果:
调用函数之前:
igin is mapped to 1
speed is mapped to 80
调用函数之后:
drivemode is mapped to 7
igin is mapped to 1
speed is mapped to 90
5️⃣ 内置函数containsKey 检查key是否存在
on key 'd'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
if (setSignal.containsKey("speed"))
{
write("key speed 存在");
}
else
{
write("key speed 不存在");
}
}
6️⃣ 内置函数size 统计键值对个数
on key 'd'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
write("setSignal key/value number:%d",setSignal.size());
}
setSignal key/value number:2
7️⃣ 内置函数remove 根据key删除一个key/value
on key 'd'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
setSignal.remove("speed");
for (char [] mykey : setSignal)
{
write("%s is mapped to %d", mykey, setSignal[mykey]);
}
}
igin is mapped to 1
7️⃣ 内置函数clear 删除所有key/value
on key 'd'
{
long setSignal[char []];
setSignal["speed"] = 80;
setSignal["igin"] = 1;
setSignal.clear();
write("setSignal key/value number:%d",setSignal.size());
}
setSignal key/value number:0

总结


- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
边栏推荐
- 实习经历梳理
- Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
- 【C Primer Plus第九章课后编程题】
- 1592. 重新排列单词间的空格
- Win11的WSL2系统更换磁盘和wsl使用简介
- nacos集群配置详解
- 【Vmware NSX-V基本架构及组件安装】
- Nacos配置中心用法详细介绍
- Unity笔记——FairyGUI
- Self-study HarmonyOS application development (56) - Use Service to ensure that the application runs continuously in the background
猜你喜欢

Win11的WSL2系统更换磁盘和wsl使用简介

CMake Tutorial 巡礼(1)_基础的起点

【Flutter】Flutter inspector 工具使用详解,查看Flutter布局,widget树,调试界面等

i.MX6U-driver development-3-new character driver

How Navicat Connects to MySQL

Fabric Writing Case Chaincode

Meetings OA To Be Meeting && All Meetings

【MySQL系列】MySQL数据库基础

泰克Tektronix示波器软件TDS520|TDS1001|TDS1002上位机软件NS-Scope

循环神经网络(RNN)
随机推荐
1.2Recyclerview实现Item点击事件
Filebeat如何保证在日志文件被切割(或滚动rolling)时依然正确读取文件
【励志】科比精神
Fabric 编写案例 链码
msyql set names 字符转换处理
工厂模式
Detailed introduction of @RequestParam annotation
"The lighthouse factory" of China path: smart roll out from point to surface
Worthington Papain & Chymotrypsin & DNase I
[Flutter] Detailed explanation of the use of the Flutter inspector tool, viewing the Flutter layout, widget tree, debugging interface, etc.
i.MX6U-driver development-3-new character driver
How many ways does Selenium upload files?I don't believe you have me
Minimum number to rotate array
exness:美国GDP萎缩,日元反弹受捧
循环神经网络(RNN)
MySql的初识感悟,以及sql语句中的DDL和DML和DQL的基本语法
[QNX Hypervisor 2.2用户手册]9.12 预留
Nacos配置中心用法详细介绍
4 hotspot inquiry networks necessary for new media operations
Navicat报错:1045-Access denied for user [email protected](using passwordYES)
