Resolvendo Todos Os Problemas Do Windows E Outros Programas

Dica Unix: Mais sobre matrizes associativas

ITworld.com -Uma matriz associativa, quando implementada em Perl, passou a ser conhecida como 'hash' - uma palavra que também é usada para descrever o valor digerido (ou seja, o 'resumo da mensagem') gerado a partir de um pedaço de texto mais longo e usado para garantir que o texto não foi alterado (se uma mensagem antes e depois da transmissão resultar no mesmo hash, o texto pode assumir que não foi alterado).

Essa escolha da palavra 'hash' para um uso aparentemente não relacionado não é surpreendente quando a função de um hash é considerada. O valor de cada elemento hash é calculado a partir de sua chave de uma maneira que não é totalmente diferente da forma como os resumos das mensagens são calculados a partir do texto que eles representam - portanto, o conceito de computação de um 'hash' que leva ao valor de dados adequado para um elemento na matriz.



Usando a matriz da coluna da semana passada, o comprimento de onda de várias cores do arco-íris pode ser atribuído a um hash de várias maneiras diferentes. No uma das tarefas que vimos na semana passada , os elementos hash foram configurados em um comando que incorporou grupos de chave / valor usando linhas separadas para esclarecer as relações entre os nomes das cores e os valores de comprimento de onda:



% comprimento de onda = ('vermelho', 650, 'laranja', 590, 'amarelo', 570, 'verde', 510, 'azul', 475, 'índigo', 445, 'violeta', 400);Esse formato não é essencialmente diferente de atribuir os valores em uma única linha, conforme ilustrado na linha abaixo. Acabamos de introduzir quebras de linha para destacar a associação entre vermelho e 650, laranja e 590 e assim por diante.

%wavelength=('red',650,'orange',590,'yellow',570,'green',510,'blue',475,'indigo',445,'violet',400); 
A maioria dos programadores Perl prefere usar a sintaxe mais recente, ainda mais legível, que torna a associação entre cada chave hash e seu valor hash ainda mais clara:
%wavelength = ( red => 650, orange => 590, yellow => 570, green => 510, blue => 475, indigo => 445, violet => 400 ); 
E, sim, você poderia colocar toda esta tarefa em uma única linha, se quisesse. Simplesmente não é tão bom de ler:
%wavelength=(red=>650,orange=>590,yellow=>570,green=>510,blue=>475,indigo=>445,violet=>400); 
Para percorrer os elementos de um hash Perl, podemos usar uma instrução while como esta, em que cada par chave / valor é recuperado e exibido.
while ( my ($key, $value) = each(%wavelength) ) { print '$key => $value
'; } 
Também poderíamos configurar um loop for que pode ser parecido com este:
for my $key ( keys %wavelength ) { my $value = $wavelength{$key}; print '$key => $value
'; } 
Qualquer um desses loops resultaria na seguinte saída:
blue => 475 green => 510 indigo => 445 violet => 400 red => 650 yellow => 570 orange => 590 
Como vimos na semana passada, a ordem em que os valores são exibidos é ímpar. Hashes são coleções desordenadas de valores, então a ordem espectral com a qual pensamos nas cores do arco-íris não tem relação com a maneira como as matrizes são realmente implementadas, nem a ordem em que adicionamos elementos a nossa matriz. Curiosamente, essa ordem pode não ser a mesma de um sistema para outro. Aqui está o mesmo hash exibido no Mac OS X:
blue => 475 orange => 590 green => 510 violet => 400 yellow => 570 red => 650 indigo => 445 
Isso não significa, é claro, que estejamos confinados a percorrer hashes nesses pedidos difíceis de entender. Podemos optar por exibir hashes na ordem de chave ou valor com loops como estes:
foreach $key (sort(keys %wavelength)) { print $key, ' => ', $wavelength{$key}, '
'; } 
Este loop exibe nosso hash de comprimento de onda na ordem das chaves:
blue => 475 green => 510 indigo => 445 orange => 590 red => 650 violet => 400 yellow => 570 
O seguinte loop exibe o mesmo hash na ordem dos valores - sem dúvida, uma ordem mais significativa para este array em particular:
foreach $key (sort { $wavelength{$b} $wavelength{$a} } keys %wavelength) { printf '%4d %s
', $wavelength{$key}, $key; } 
Aqui está a saída:
 650 red 590 orange 570 yellow 510 green 475 blue 445 indigo 400 violet 
Para ver o tamanho de um hash em Perl, você pode usar a função de teclas como esta:
print 'the size of the hash: ' . keys( %wavelength ) . '
'; 
A função keys retorna as chaves do hash nomeado. Portanto, o comando, 'print keys (% wavelength);', imprimiria:
bluegreenindigovioletredyelloworange 
Por outro lado, concatenado em uma string, 'keys (% wavelength)' fornece o tamanho (número de elementos) do array:
the size of the hash: 7 
Se você deseja excluir um elemento em um hash, você pode usar a função delete. Nesse sentido, trabalhar com um hash é consideravelmente mais fácil do que trabalhar com uma matriz indexada. Imagine o que você teria que fazer para espremer um elemento do meio de uma matriz indexada e você verá o que quero dizer.
delete $wavelength{green}; 
Hashes são particularmente úteis porque refletem a maneira como a maioria das pessoas pensa sobre a maioria das informações com as quais trabalham. Horas trabalhadas na segunda-feira fazem mais sentido para a maioria de nós do que horas trabalhadas no dia 1 (ou dia 0!).

Hashes não exigem que cada chave possível tenha um valor. Podemos armazenar o comprimento de onda das cores do arco-íris, por exemplo, mas omitir outros comprimentos de onda, como ultravioleta e infravermelho.



o que é microsoft edge para windows 10

Qual Korn Shell?

Na coluna da semana passada , Mencionei um script que pode exibir qual versão do shell Korn você está usando. Várias pessoas escreveram que preferem digitar Escape, ^ V com a opção vi definida. Na saída abaixo, a sequência Escape, ^ V foi digitada após o comando set. O M nesta saída se refere à compilação binária 'multibyte' de 1988 ou versões mais recentes do shell Korn. O '88i' indica que esta é a nona versão ('i' sendo a nona letra do alfabeto) de ksh88.

$ set -o vi $ Version M-11/16/88i 
Procurando por ksh93 no Solaris?

Embora as versões do Solaris até o Solaris 10 usem ksh88 para o shell Korn padrão (/ bin / ksh), você pode ter o ksh93 instalado também. Se você tiver o CDE instalado, você deve ter o ksh93 disponível como / usr / dt / bin / dtksh.



Usando matrizes associativas no Korn Shell e Perl (17/08/2006)

Usando matrizes indexadas no Korn Shell (10/08/2006)

Esta história, 'Dica Unix: Mais sobre matrizes associativas' foi publicada originalmente porITworld.