4D v16.3

MULTI SORT ARRAY

Página Inicial

 
4D v16.3
MULTI SORT ARRAY

MULTI SORT ARRAY 


 

MULTI SORT ARRAY ( array {; ordem}{; array2 ; ordem2 ; ... ; arrayN ; ordemN} ) 
Parâmetro Tipo   Descrição
array  Array in Array a ser ordenado
ordem  Operador in ">" para ordernar em ordem crescente ou "<" para ordenar em ordem decrescente, se omitido "aa" sem ordem
MULTI SORT ARRAY ( ptrArrayNome ; sortArrayNome ) 
Parâmetro Tipo   Descrição
ptrArrayNome   Array ponteiro in Array de um array de ponteiros
sortArrayNome   Array inteiro longo in Ordenação do array (1 = ordenar em ordem crescente, -1 = ordenar em ordem descrescente, 0 = sincronização com a ordenação anterior)

O comando MULTI SORT ARRAY lhe permite realizar um tipo de ordenação multi-nível em um conjunto de arrays.

Este comando aceita duas sintaxes diferentes.

  • Primeira sintaxe: MULTI SORT ARRAY (array{; ordem}{; array2; ordem2; ...; arrayN; ordemN}) 


Essa sintaxe é a mais simples, que permite passar diretamente os nomes dos arrays sincronizados onde você deseja aplicar uma ordenação com multi-critérios.

Você pode passar um número ilimitado de pares (Array;> or <) e/ou somente matrizes. Todos os arrays passados como parâmetros são ordenados de forma sincronizada.

Você pode passar arrays de qualquer tipo, exceto para Ponteiros ou arrays de Imagens. Você pode ordenar um elemento de um array bidimensional (i.e. a2DArray{$vlThisElement}), mas não pode classificar o array 2D em si (i.e. a2DArray).

Para utilizar o conteúdo de um array como critério de ordenação, passe o parâmetro de ordem. O valor do parâmetro (> ou <) determina a ordem (ascendente ou descendente), no qual o array será ordenado. Se o parâmetro de ordem for omitido, o conteúdo do array não será utilizado como critério de classificação.

Nota: tenha em mente que pelo menos um critério de ordenação deve ser passado para que o comando funcione. Se nenhum critério de ordenação é definido, é gerado um erro.

Os níveis de ordenação são determinados pela ordem em que os arrays são passados para o comando: a posição de um array com um critério de classificação na sintaxe determina o seu nível de classificação.

• Segunda sintaxe: MULTI SORT ARRAY (ptrArrayNome; sortArrayNome)

Esta sintaxe, mais complexa, é também um valor incalculável para desenvolvimentos genéricos (por exemplo, você pode criar um método genérico para classificar arrays de todos os tipos, ou ainda, criar o equivalente de um comando genérico SORT ARRAY).

O parâmetro ptrArrayNome contém o nome de um array de array de ponteiros; cada elemento desse array é um ponteiro que designa um array para ser ordenado. As ordenações são executadas na ordem do array de ponteiros definido por ptrArrayNome.
Atenção
: todos os arrays apontados pelo ptrArrayNome devem ter o mesmo número de elementos.

Nota:  ptrArrayNome pode ser um array de processo local ($ptrArrayNome), um processo (ptrArrayNome) ou um inter-processo (<>ptrArrayNome) de ponteiros. Por outro lado, os elementos desse array devem apontar para um processo ou arrays de inter-processo.

O parâmetro sortArrayNome contém o nome de um array no qual cada elemento indica a ordem de classificação (-1, 0 ou 1) do elemento correspondente do array de ponteiros:

-1 = Ordenar por ordem decrescente.
0 = O array não é usado como um critério de ordenação, mas deve ser classificado de acordo com as outras ordenações.
1 = Ordenar por ordem crescente.

Nota: Você não pode classificar arrays do tipo Ponteiro ou imagem. Você pode ordenar um elemento de um array bidimensional (i.e. a2DArray{$vlThisElement}), mas não pode classificar o array 2D em si (i.e. a2DArray).

Para cada elemento do array ptrArrayNome, deve haver um elemento correspondente do array sortArrayNome. Ambos os arrays devem, portanto, ter exatamente o mesmo número de elementos.

O exemplo a seguir usa a primeira sintaxe: ele cria quatro arrays e os classifica por cidade (ordem crescente) e depois por salário (por ordem decrescente) com os dois últimos arrays, names_array telNum_array, sendo sincronizados de acordo com os critérios de classificação anteriores:

 ALL RECORDS([Empregados])
 SELECTION TO ARRAY([Empregados]Cidade;cidades;[Empregados]Salario;salarios;[Empregados]Nome;
 nomes;[Empregados]TelNum;telNums)
 MULTI SORT ARRAY(cidades;>;salarios;<;nomes;telNums)

Se você quiser que os nomes dos arrays sejam usados como um terceiro critério de ordenação, basta adicionar  > ou < após o parâmetro names_array.
Note que a sintaxe:

 MULTI SORT ARRAY(cidades;>;salarios;nomes;telNums)

é equivalente a:

 SORT ARRAY(cidades;salarios;nomes;telNums;>)

O exemplo a seguir usa a segunda sintaxe: ele cria quatro arrays e os classifica por cidade (ordem crescente) e companhia (ordem decrescente); os dois últimos arrays, nomes_Array e telNum_Array, sendo sincronizados de acordo com critérios de classificação anteriores:

 ALL RECORDS([Empregados])
 SELECTION TO ARRAY([Empregados]Cidade;cidades;[Empregados]Empresa;empresas;[Empregados]Nome;
 nomes;[Empregados]TelNum;telNums)
 ARRAY POINTER(ponteiros_Array;4)
 ARRAY LONGINT(sorts_Array;4)
 Array_ponteiros{1}:=->cidades
 Array_ordem{1}:=1
 Array_ponteiros{2}:=->empresas
 Array_ordem{2}:=-1
 Array_ponteiros{3}:=->nomes
 Array_ordem{3}:=0
 Array_ponteiros{4}:=->telNums
 Array_ordem{4}:=0
 MULTI SORT ARRAY(Array_ponteiros;Array_ordem)

Se quiser que o array de nomes seja usado como um terceiro critério de ordenação, você precisa atribuir o valor 1 para o elemento Ordem_array{3}. Ou então, se você quiser os arrays sejam classificados pelo critério único da cidade, atribua o valor 0 para os elementos ordem_array{2}, ordem_array{3} e ordem_array{4} . Desta forma, você obtém um resultado idêntico ao. SORT ARRAY(cidades; empresas; nomes; telNums;>).



Ver também 

ORDER BY
SELECTION TO ARRAY
SORT ARRAY

 
PROPRIEDADES 

Produto: 4D
Tema: Arrays
Número 718

This command can be run in preemptive processes

 
HISTÓRIA 

Modificado: 4D 2004

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)