Pular para o conteúdo

Array de duas dimensões

Responder tópico
  • Denunciar
  • Indicar

1. Array de duas dimensões

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

Responder tópico

2. Re: Array de duas dimensões

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

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

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

6. Re: Array de duas dimensões

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?

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder