Array de duas dimensões

1. Array de duas dimensões

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/04/2016 - 22:26h

Olá,

O objectivo do script é: Criar um array de duas dimensões. A cada elemento, representado pela variável i escreve numeros de 0 até 30.
O output será algo deste genero:

0
1,2,3,4...até 30
1
1,2,3,4...até 30
2
1,2,3,4...até 30
3
1,2,3,4...até 30

#!/bin/bash

for ((i=0; i<=3; i++))
do
#valor[$i]=$i
for ((g=0; g<=30; g++))
do
valor[$i,$g]=$g
done
done
echo "${valor[*]}"


Mas quando executo o resultado é apenas este:
0 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

Pelo que percebo ele está a escrever o resultado do último indice do array, neste caso o indice 3. Certo? O que estarei a fazer de errado?
Obrigado


  


2. Re: Array de duas dimensões

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/04/2016 - 22:36h

http://stackoverflow.com/questions/16487258/how-to-declare-2d-array-in-bash

You can simulate them for example with hashes, but need care about the leading zeroes and many other things. The next demonstration works, but it is far from optimal solution.


declare -A matrix
num_rows=4
num_columns=5

for ((i=1;i<=num_rows;i++)) do
for ((j=1;j<=num_columns;j++)) do
matrix[$i,$j]=$RANDOM
done
done

f1="%$((${#num_rows}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
printf "$f2" $i
done
echo

for ((j=1;j<=num_columns;j++)) do
printf "$f1" $j
for ((i=1;i<=num_rows;i++)) do
printf "$f2" ${matrix[$i,$j]}
done
echo
done


Resumindo: você cria bidimensionais simulando com hashes. Para usar hash, você usa o comando declare com a opção -A.

Obs 1: na página citada tem mais soluções.
Obs 2: eu conheço um pequeno truque sujo, mas não vale a pena. Essa solução do texto é melhor.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Array de duas dimensões

Ede
ede_linux

(usa Ubuntu)

Enviado em 24/04/2016 - 22:40h

Obrigado pela ajuda
Mas você acaba de me dar um chuto no meio das pernas! :P Ainda estou a começar no shell script. Já tinha me cruzado com esse script, mas coloquei de lado pois não o percebi. Mas irei estuda-lo. Apenas para me orientar. No meu script está tudo errado ou apenas estou a errar na parte de impressão?

Valeu


4. Re: Array de duas dimensões

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/04/2016 - 22:43h

ede_linux escreveu:

Obrigado pela ajuda
Mas você acaba de me dar um chuto no meio das pernas! :P Ainda estou a começar no shell script. Já tinha me cruzado com esse script, mas coloquei de lado pois não o percebi. Mas irei estuda-lo. Apenas para me orientar. No meu script está tudo errado ou apenas estou a errar na parte de impressão?

Valeu


Para começar você não usou o declare -A no array.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



5. Re: Array de duas dimensões

Iago Lira
iagolira

(usa Debian)

Enviado em 25/04/2016 - 09:31h

Tente isso: http://stackoverflow.com/questions/11233825/multi-dimensional-arrays-in-bash

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física


6. Re: Array de duas dimensões

Leonardo Henrique Meres Silva
leosixers

(usa Debian)

Enviado em 25/04/2016 - 13:38h

Para imprimir o resultado que você precisa basta fazer isso:


#!/bin/bash

for ((i=0; i<=3; i++))
do
echo $i
#valor[$i]=$i
for ((g=0; g<=30; g++))
do
#valor[$i,$g]=$g
echo -n $g
done
echo ""
done
#echo "${valori[*]}"



No entanto não está sendo utilizado arrays no código acima. Você necessariamente precisa utilizá-los?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts