Conforme visto na Seção 8.15, o tipo de dados matriz
(array) é identificado anexando colchetes
([]) ao nome do tipo de dados dos elementos da
matriz.
[87]
A Tabela 9.56 descreve os operadores especializados disponíveis para as matrizes. Além desses, estão disponíveis para as matrizes os operadores de comparação usuais descritos na Tabela 9.1. Os operadores de comparação comparam o conteúdo da matriz elemento por elemento, usando a função de comparação de árvore-B padrão para o tipo de dados do elemento, e classificam com base na primeira diferença. Nas matrizes multidimensionais, os elementos são acessados na ordem principal de linha (row-major order) (o último índice varia mais rapidamente). Se o conteúdo das duas matrizes forem idênticos, mas suas dimensões forem diferentes, a primeira diferença nas informações de dimensão determinará a ordem de classificação.
Tabela 9.56. Operadores de matriz
Operador Descrição Exemplo(s) |
|---|
A primeira matriz contém a segunda matriz, ou seja, cada
elemento que aparece na segunda matriz é igual a algum elemento
da primeira matriz?
(Duplicados não são tratados de forma especial, portanto
|
A primeira matriz está contida na segunda matriz?
|
As matrizes se sobrepõem, ou seja, têm algum elemento em comum?
|
Concatena as duas matrizes.
Concatenar uma matriz nula ou uma matriz vazia é uma operação
vazia (
|
Concatena um elemento no início da matriz (que deve ser vazia ou unidimensional).
|
Concatena um elemento no fim da matriz (que deve ser vazia ou unidimensional).
|
Veja a Seção 8.15 para obter mais detalhes sobre o comportamento de operador de matriz. Veja a Seção 11.2 para obter mais detalhes sobre quais operadores suportam operações com índices.
A Tabela 9.57 descreve as funções disponíveis para uso com matrizes. Veja a Seção 8.15 para obter mais informações e exemplos do uso dessas funções.
Tabela 9.57. Funções de matriz
Função Descrição Exemplo(s) |
|---|
Acrescenta um elemento ao final de uma matriz (idêntico ao que o
operador
|
Concatena duas matrizes (idêntico ao que o operador
|
Retorna a representação em forma de texto das dimensões da matriz.
|
Retorna uma matriz preenchida com cópias do valor fornecido, com
as dimensões dos comprimentos especificados pelo segundo argumento.
O terceiro argumento, opcional, fornece valores de limite inferior
para cada dimensão (cujo padrão é
|
Retorna o comprimento da dimensão solicitada da matriz. (Retorna NULL, em vez de 0, para dimensões de matriz vazias ou ausentes.)
|
Retorna o limite inferior da dimensão solicitada da matriz.
|
Retorna o número de dimensões da matriz.
|
Retorna o índice da primeira ocorrência do segundo argumento na
matriz, ou
|
Retorna uma matriz contendo os índices de todas as ocorrências
do segundo argumento na matriz fornecida como primeiro argumento.
A matriz deve ser unidimensional.
As comparações são feitas usando a semântica
|
Anexa um elemento ao início de uma matriz
(idêntico ao que o operador
|
Remove da matriz todos os elementos iguais ao valor fornecido.
A matriz deve ser unidimensional.
As comparações são feitas usando a semântica
|
Substitui cada elemento da matriz igual ao segundo argumento pelo terceiro argumento.
|
Inverte a primeira dimensão da matriz.
|
Retorna uma matriz de
|
Mistura aleatoriamente a primeira dimensão da matriz.
|
Ordena a primeira dimensão da matriz.
A ordem de classificação é determinada pela ordem de classificação
padrão do tipo de dados do elemento da matriz; entretanto,
se o tipo de dados do elemento for ordenável,
a ordenação a ser usada pode ser especificada adicionando uma
cláusula
Se
|
Converte cada elemento da matriz em sua representação de texto,
e concatena aqueles separados pela cadeia de caracteres presente
em
|
Retorna o limite superior da dimensão solicitada da matriz.
|
Retorna o número total de elementos na matriz, ou 0 se a matriz estiver vazia.
|
Corta uma matriz removendo os últimos
|
Expande uma matriz em um conjunto de linhas. Os elementos da matriz são lidos na ordem de armazenamento.
1 2
foo bar baz quux
|
Expande várias matrizes (possivelmente de tipos de dados
diferentes) em um conjunto de linhas.
Se nem todas as matrizes tiverem o mesmo comprimento, as mais
curtas serão preenchidas com o valor
a | b ---+----- 1 | foo 2 | bar | baz
|
Veja também na Seção 9.21 a função de
agregação para uso com matrizes array_agg.
Exemplo 9.5. Exemplo do tradutor
Este exemplo mostra o uso das funções e operadores para matrizes tomando como base uma matriz de Hankel.
Uma matriz de Hankel é uma matriz onde os elementos ao longo de
cada anti-diagonal são iguais.
Se c for a primeira coluna da matriz de Hankel e
r for a última linha da matriz de Hankel, então
p = [c r(2:end)] determina completamente todos
os elementos da matriz de Hankel usando o mapeamento
Hi,j = pi+j-1.
Todas as matrizes de Hankel quadradas são simétricas.
MathWorks MATLAB.
-- Esta função retorna uma matriz de Hankel com a primeira coluna
-- variando de 1 a N, e a última linha variando de N a (N + M - 1),
-- onde N e M são as dimensões da matriz.
CREATE OR REPLACE FUNCTION hankel (n int, m int)
RETURNS int[][] LANGUAGE plpgsql AS $$
DECLARE
i int;
j int;
matriz int[][];
BEGIN
matriz = array_fill(0, array[n,m]);
FOR i IN 1..n LOOP
FOR j IN 1..m LOOP
matriz[i][j] = i + j - 1;
END LOOP;
END LOOP;
RETURN matriz;
END $$;
SELECT hankel(3,4);
hankel
---------------------------------
{{1,2,3,4},{2,3,4,5},{3,4,5,6}}
(1 linha)
SELECT array_dims(hankel(3,4));
array_dims ------------ [1:3][1:4] (1 linha)
SELECT array_ndims(hankel(3,4));
array_ndims
-------------
2
(1 linha)
SELECT array_to_string(hankel(3,4), ';');
array_to_string
-------------------------
1;2;3;4;2;3;4;5;3;4;5;6
(1 linha)
SELECT cardinality(hankel(3,4));
cardinality
-------------
12
(1 linha)
SELECT trim_array(hankel(3,4), 1);
trim_array
-----------------------
{{1,2,3,4},{2,3,4,5}}
(1 linha)
SELECT hankel(3,12) @> hankel(3,4) AS contém;
contém -------- t (1 linha)
SELECT hankel(3,12) && hankel(3,4) AS sobrepõem;
sobrepõem ----------- t (1 linha)
SELECT hankel(3,4) || hankel(3,4) AS concatenação;
concatenação
---------------------------------------------------------------
{{1,2,3,4},{2,3,4,5},{3,4,5,6},{1,2,3,4},{2,3,4,5},{3,4,5,6}}
(1 linha)
SELECT array_reverse(hankel(3,4)) AS inversão;
inversão
---------------------------------
{{3,4,5,6},{2,3,4,5},{1,2,3,4}}
(1 linha)
SELECT array_sample(hankel(3,4),2) AS amostra;
amostra
-----------------------
{{1,2,3,4},{3,4,5,6}}
(1 linha)
SELECT array_shuffle(hankel(3,4)) AS mistura;
mistura
---------------------------------
{{3,4,5,6},{2,3,4,5},{1,2,3,4}}
(1 linha)
[87] IBM DB2 Array values: Uma matriz é uma estrutura que contém uma coleção ordenada de elementos de dados, onde cada elemento pode ser referenciado pelo valor de seu índice na coleção. A cardinalidade de uma matriz é o número de elementos na matriz. Todos os elementos em uma matriz têm o mesmo tipo de dados. (N. T.)