CAPL中的键值对(hash)数据类型
- 🍅 我是螞蟻小兵,專注于車載診斷領域,尤其擅長于對CANoe工具的使用
- 🍅 尋找組織 ,答疑解惑,摸魚聊天,博客源碼,點擊加入👉【相親相愛一家人】
- 🍅 玩轉CANoe,博客目錄大全,點擊跳轉👉
📘前言
-
🍅 鍵值對(Key - Value)又名哈希(hash),各種編程語言都會有的一種數據類型,Python中叫字典,CAPL中叫 語義場聯想(Associative fields ),本節想通過Python和CAPL的角度講解下key-value的使用
-
🍅 演示軟硬件環境 Windows11 x64 ; CANoe 11 SP2 x64
目錄
- 📘前言
- 📙 CAPL和Python的簡單對比
- 🌎總結
📙 CAPL和Python的簡單對比
1?? python下是字典的數據類型,通過花括號定義,可以初始化
- 鍵一般是唯一的,如果重復最后的一個鍵值對會替換前面的,值不需要唯一。
- 值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
2?? CAPL中叫Associative fields ,定義方法如下
- capl定義如下圖,key,value的數據類型可以是: long, int64, float, double, enumeration types and char[].
- 不像python,在同一個變量中,value可以是整形,也可以是字符串,CAPL中,只能是同一種數據類型
- 下面代碼key 和value 都是 字符串類型的
- 輸出結果:
Age is mapped to 7
Name is mapped to Zara
sex is mapped to boy
- 下面代碼key 字符串類型的,Value是long類型
3?? 特殊的for 語句
- 這個for 循環是特殊的,就是這個結構 char[] 是key的數據類型;mykey,可以隨意定義,代表key;setSignal是keyvalue 變量名
- for循環所以是按照key的升序來的,仔細看下上面打印輸出,Age ,Name ,sex先后打印出來,并不是按照賦值的順序。
- 可以在循環中增加或者更改 value的
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
🌎總結
- 🍅 有需要演示中所用demo工程的,可以關注下方公眾號網盤自取啦,感謝閱讀。
- 🚩要有最樸素的生活,最遙遠的夢想,即使明天天寒地凍,路遙馬亡!
- 🚩如果這篇博客對你有幫助,請 “點贊” “評論”“收藏”一鍵三連 哦!碼字不易,大家的支持就是我堅持下去的動力。
總結
以上是生活随笔為你收集整理的CAPL中的键值对(hash)数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高数/线性代数常用公式/技巧
- 下一篇: html三级下拉栏插件,纯js超酷下拉框