tongsiying

阅读|运动|自律

0%

map

1.map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
读文件放到map中:
https://blog.csdn.net/weixin_42651205/article/details/83624574
cat test.txt
000000000007a16000000088:0
000000000007a16000000089:0
000000000007a16300000087:0
000000000007a16800000088:0

-------------------------------------------------------------
#!/bin/bash
str=(`cat ./test.txt | awk -F ' ' '{print $1}'`)
declare -A mymap; #定义
for i in ${!str[@]}
do
eval $(echo ${str[i]} | awk '{split($0, filearray, ":");print "mymap["filearray[1]"]="filearray[2]}')
done
#输出所有key值
echo ${!mymap[@]}

#输出所有value值
echo ${mymap[@]}

#遍历
for key in ${!mymap[@]}
do
echo "${mymap[$key]}"
done

#查找和删除
findkey="keyx"
value="valuex"

# 查找
echo ${mymap[$findkey]}
#查找插入和删除,找到就删掉,没找到就插入
if [ ! -n "${mymap[$key]}" ]
then
mymap[$findkey]=$value
else
echo "find value"
unset mymap[$findkey]
fi

2.map详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
在使用map时,需要先声明,否则结果可能与预期不同,array可以不声明
方式1:
[root@host102442549 Master]# cat 11.sh
declare -A myMap
myMap["my03"]="03"
echo ${myMap[my03]}
[root@host102442549 Master]# sh 11.sh
03

方式2:
[root@host102442549 Master]# cat 22.sh
declare -A myMap=(["my01"]="01" ["my02"]="02")
myMap["my03"]="03"
myMap["my04"]="04"

echo ${myMap[my01]}
echo ${myMap[my02]}
echo ${myMap[my03]}
echo ${myMap[my04]}
[root@host102442549 Master]# sh 22.sh
01
02
03
04

输出Map所有的key、value、长度:
# 1)输出所有的key
#若未使用declare声明map,则此处将输出0,与预期输出不符,此处输出语句格式比arry多了一个!
echo ${!myMap[@]}

#2)输出所有value
#与array输出格式相同
echo ${myMap[@]}

#3)输出map长度
#与array输出格式相同
echo ${#myMap[@]}

Map遍历:
#1)遍历,根据key找到对应的value
for key in ${!myMap[*]};do
echo $key
echo ${myMap[$key]}
done
#2)遍历所有的key
for key in ${!myMap[@]};do
echo $key
echo ${myMap[$key]}
done
#3)遍历所有的value
for val in ${myMap[@]};do
echo $val
done


测试:
[root@cdh-143 shell-test]# more map-test.sh
#!/bin/sh

echo "一、定义Map:declare -A myMap=([\"myMap00\"]=\"00\" [\"myMap01\"]=\"01\")"
declare -A myMap=(["my00"]="00" ["my01"]="01")
myMap["my02"]="02"
myMap["my03"]="03"

echo "二、输出所有的key:"
echo ${!myMap[@]}

echo "三、输出所有value:"
echo ${myMap[@]}

echo "四、输出map的长度:"
echo ${#myMap[@]}

echo "五、遍历,根据key找到对应的value:"
for key in ${!myMap[*]};do
echo "key:"$key
echo "value:"${myMap[$key]}
done

echo "六、遍历所有的key:"
for key in ${!myMap[@]};do
echo "key:"$key
echo "value:"${myMap[$key]}
done

echo "七、遍历所有value:"
for val in ${myMap[@]};do
echo "value:"$val
done

引用:
https://www.cnblogs.com/yy3b2007com/p/11267237.html

赞赏一下吧~