Como excluir elementos existentes de uma matriz e continuar acrescentando novos elementos posteriormente

1

Abaixo está um exemplo, onde estou usando duas matrizes que podem ser iniciadas com muitos elementos, por agora ter "None" como o único elemento, existe alguma maneira de excluir elementos / elementos existentes e, em seguida, continuar acrescentando novos elementos quando dadas correspondências de condições, caso contrário, deixe a matriz inalterada.

Procurando uma maneira com codificação mínima.

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
for index in ${!DICT[@]} ; do
  [[ ${index} =~ 1 ]] && array_a+=("${DICT[${index}]}") 
  [[ ${index} =~ 50 ]] && array_b+=("${DICT[${index}]}")
done 
echo ${array_a[@]}
echo ${array_b[@]}

Saída:

None destination source        
None

Resultado esperado:

destination source
None

Estou tendo uma solução idiota para isso

array_a=(None)
array_b=(None)
declare -A DICT=([1]="source" [11]="destination" [2]="nowhere")
a=0
b=0
for index in ${!DICT[@]} ; do
if [[ ${index} =~ 1 ]] ; then if [[ ${a} -eq 0 ]] ; then ((a++)) ; unset array_a ; fi ; array_a+=("${DICT[${index}]}") ; fi
if [[ ${index} =~ 50 ]]; then if [[ ${b} -eq 0 ]] ; then ((b++)) ;  unset array_b ; fi ; array_b+=("${DICT[${index}]}") ; fi
done 
echo ${array_a[@]}
echo ${array_b[@]}

Saída:

destination source
None
    
por Bharat 31.08.2018 / 08:55

1 resposta

1

Use isto:

ini_array_a=(None xyz)
ini_array_b=()
array_a=()
array_b=()
[...]
array_a=(${array_a[@]:-${ini_array_a[@]}})
array_b=(${array_b[@]:-${ini_array_b[@]}})
echo ${array_a[@]:-None}
echo ${array_b[@]:-None}

Em que $ini_array_a e $ini_array_b são as matrizes já inicializadas. Nós definimos dois novos arrays sem valor interno. Então faça o seu processamento. Para ecoar as matrizes, use Expansão de Parâmetro . Os arrays $array_a e array_b são os que serão impressos no final (isso é para resolver seus comentário ).

${parameter:-word}

    If parameter is unset or null, the expansion of word is substituted.
    Otherwise, the value of parameter is substituted.
    
por 31.08.2018 / 09:41