清除关联数组的一部分
Clear part of associative array
我必须使用循环来清除关联数组中的一些数据,还是有更快更好的选择?
目前我正在使用:
until [[ $ploop1 -eq 99 ]]; do ##do044
((++ploop1))
hnr[$ploop1,2]=0
hnr[$ploop1,3]=0
hnr[$ploop1,4]=0
hnr[$ploop1,5]=0
done ##do044
请注意,不应清除 ,0 和 1
将我的评论合并到一个区域中...
OP 提到了 'clear the data' 但实际上是将数组元素设置为 0
(零)。如果 OP 有要处理的数字列表,那么类似下面的内容也应该有效:
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
for x in {2..5} # or `x in 2 3 4 5` or `x in {2..4} 5` or ...
do
hnr[$ploop1,$x]=0
done
done
如果 OP 不介意使用 eval
这可以缩短为:
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
eval hnr[$ploop1,{2..5}]=0
done
现在,如果 OP 想要 clear
remove the elements
中的元素,那么这应该可行...
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
unset hnr[$ploop1,{2..5}]
done
...并且只要 unset
是针对数组元素发出的并且 不是 数组(即 unset hnr
),那么数组声明仍然是 intact/valid,即不需要重新 declare -A
数组。
添加 Philippe 的 question/comment:
如果 OPs 循环的全部目的是 只是 取消设置数组元素,那么下面应该消除循环的需要:
unset hnr[{0..99},{2..5}]
注意:OP可以根据实际使用范围调整数字...
我必须使用循环来清除关联数组中的一些数据,还是有更快更好的选择?
目前我正在使用:
until [[ $ploop1 -eq 99 ]]; do ##do044
((++ploop1))
hnr[$ploop1,2]=0
hnr[$ploop1,3]=0
hnr[$ploop1,4]=0
hnr[$ploop1,5]=0
done ##do044
请注意,不应清除 ,0 和 1
将我的评论合并到一个区域中...
OP 提到了 'clear the data' 但实际上是将数组元素设置为 0
(零)。如果 OP 有要处理的数字列表,那么类似下面的内容也应该有效:
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
for x in {2..5} # or `x in 2 3 4 5` or `x in {2..4} 5` or ...
do
hnr[$ploop1,$x]=0
done
done
如果 OP 不介意使用 eval
这可以缩短为:
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
eval hnr[$ploop1,{2..5}]=0
done
现在,如果 OP 想要 clear
remove the elements
中的元素,那么这应该可行...
until [[ $ploop1 -eq 99 ]]; do
((++ploop1))
unset hnr[$ploop1,{2..5}]
done
...并且只要 unset
是针对数组元素发出的并且 不是 数组(即 unset hnr
),那么数组声明仍然是 intact/valid,即不需要重新 declare -A
数组。
添加 Philippe 的 question/comment:
如果 OPs 循环的全部目的是 只是 取消设置数组元素,那么下面应该消除循环的需要:
unset hnr[{0..99},{2..5}]
注意:OP可以根据实际使用范围调整数字...