BASH - Matriz associativa - obtendo o valor da chave no elemento final

1

Eu criei um array associativo da seguinte forma:

declare -A test_array

test_array[0,0]="1"
test_array[0,1]="A"
test_array[0,2]="11"
test_array[0,3]="AA"
test_array[1,0]="2"
test_array[1,1]="B"
test_array[1,2]="22"
test_array[1,3]="BB"

O que eu quero fazer é obter o valor da chave no elemento final. Neste caso, o 1 em:

test_array[1,3]="BB"

Existe alguma maneira de fazer isso?

Obrigado

    
por Codemunger 30.01.2016 / 10:51

2 respostas

3

Infelizmente, não há "elemento final" em uma matriz associativa.

    
por 30.01.2016 / 10:59
2

Chaves de matriz associativas não são mantidas em nenhuma ordem. A solução usual para esse problema é ter uma segunda matriz indexada que mantenha as chaves na ordem que você deseja lembrar. Por exemplo, uma matriz x :

declare -a x

test_array[0,0]="1" x[${#x[*]}]='0,0'
test_array[0,1]="A" x[${#x[*]}]='0,1'
...

${#x[*]} é o comprimento da matriz x , portanto, cada linha acima está adicionando uma nova entrada até o final da matriz x (índice 0, depois 1, ...).

Você pode usar a última entrada dessa matriz (no comprimento do índice-1) para obter sua chave e valor:

echo ${x[${#x[*]}-1]}
echo ${test_array[${x[${#x[*]}-1]}]}
    
por 30.01.2016 / 12:05