当前位置:网站首页>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

总结


- 要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
边栏推荐
- 会议OA之待开会议&&所有会议
- Recurrent Neural Network (RNN)
- How to realize the frame selection of objects in canvas (6)
- canvas 中如何实现物体的框选(六)
- 华为“天才少年”稚晖君又出新作,从零开始造“客制化”智能键盘
- 谷歌浏览器(google)设置翻译中文,翻译选项不生效或没有弹出翻译选项
- 在服务器上运行node流程
- [Flutter] Flutter preloading of mixed development solves the problem of slow page loading for the first time
- 经典毕业设计:基于SSM实现高校后勤报修系统
- vmtouch——Linux下的文件缓存管理神器
猜你喜欢

泰克Tektronix示波器软件TDS420|TDS430|TDS460上位机软件NS-Scope

Minimum number to rotate array

LeetCode/Scala - without the firstborn of the string of characters, the longest text string back

He cell separation technology 丨 basic primary cell separation methods and materials

MATLAB被禁下一个会是LABVIEW吗?国产测试软件ATECLOUD崛起发力

Fabric 编写案例 链码

How many ways does Selenium upload files?I don't believe you have me

News text classification

He used to cells harvested trypsin & release procedure

Detailed introduction to the usage of Nacos configuration center
随机推荐
工厂模式
7.28
Linux-安装MySQL(详细教程)
string replace spaces
帽式滑环的工作原理
Worthington Dissociation Enzymes: Collagenase and Four Basic Profiles
[Training DAY16] ALFA [convex hull] [computational geometry]
msyql set names 字符转换处理
3 tips for using hot events to create press releases?A must-see for self-media people
Baidu Intelligent Cloud Zhangmiao: Detailed explanation of enterprise-level seven-layer load balancing open source software BFE
百度智能云章淼:详解企业级七层负载均衡开源软件BFE
Since the media increase play a short video?From the three aspects
STM32 - OLED display experiment
MATLAB被禁下一个会是LABVIEW吗?国产测试软件ATECLOUD崛起发力
【微服务~Nacos】Nacos之配置中心
npm ERR! code ENOTSUPnpm ERR! notsup Unsupported engine for [email protected]: wanted: {“n
软考 --- 数据库(5)数据库控制
面试题:手写Promise
How to set up hybrid login in SQL server in AWS
高德地图jsapi不生效 INVALID_USER_SCODE
