清除关联数组的一部分

亚当·拉尔森

我必须使用循环来清除关联数组中的某些数据,还是有更快更好的选择?

目前我正在使用:

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曾提到“清除数据”,但实际上是将数组元素设置为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发出则数组声明将保持完整/有效,即无需重新declare -A数组。


添加菲利普的问题/评论:

如果OP循环的全部目的只是取消设置数组元素,则以下内容应消除对循环的需要:

unset hnr[{0..99},{2..5}]

注意:OP可以根据实际使用范围来调整数字...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章