SORT ARRAY
SORT ARRAY ( array {; array2 ; ... ; arrayN}{; > or <} )
Parâmetro | Tipo | Descrição | |
---|---|---|---|
array | Array | → | Array a ser ordenado |
> or < | Operador | → | ">" para ordenar em ordem crescente, ou "<" para ordernar em ordem decrescente, ou ordem crescente se omitido |
Descrição
O comando SORT ARRAY ordena um ou mais arrays em ordem ascendente ou descendente.
- Notas:
Você não pode ordenar arrays Ponteiro ou imagem. Você pode classificar os elementos de um array bidimensional (i.e., a2DArray{$vlThisElem}), mas você não pode classificar o array bidimensional em si (i.e., a2DArray).
Pode ordenar arrays Objeto. Elementos Null são agrupados e elementos array são ordenados com ordem interna
O último parâmetro especifica se ordenar o array em ordem ascendente ou descendente. O símbolo "maior que" (>) indica uma classificação crescente, o símbolo de "menor que" (<) indica uma ordenação descendente. Se você não especificar a ordem de classificação, então, a classificação é ascendente.
Se mais de um array for especificado, os arrays são classificados segundo a ordem de classificação do primeiro array; nenhuma ordenação multinível é realizada aqui.
No seu lugar pode utilizar o comando MULTI SORT ARRAY se deseja ordenar arrays sincronizados.
Exemplo 1
O exemplo a seguir cria duas matrizes e, em seguida, ordena-as pela empresa:
ALL RECORDS([Pessoas])
SELECTION TO ARRAY([Pessoas]Nome;asNomes;[Pessoas]Empresa;asEmpresas)
SORT ARRAY(asEmpresas;asNomes;>)
No entanto, devido a que SORT ARRAY não realiza ordenação multi-nível, você vai acabar com os nomes das pessoas em ordem aleatória dentro de cada empresa. Para ordenar as pessoas pelo nome, dentro de cada empresa, você poderia escrever:
ALL RECORDS([Pessoas])
ORDER BY([Pessoas];[Pessoas]Empresa;>;[Pessoas]Nome;>)
SELECTION TO ARRAY([Pessoas]Nome;asNomes;[Pessoas]Empresa;asEmpresas)
Exemplo 2
Você exibe os nomes da tabela [Pessoas] em uma janela flutuante. Quando você clicar nos botões na janela, você pode classificar essa lista de nomes de A a Z ou de Z a A. Como várias pessoas podem ter o mesmo nome, você também pode usar um campo de número [Pessoas]ID, que é índice único. Quando você clicar na lista de nomes, você irá recuperar o registro para o nome que você clicou. Por manter um array sincronizado e escondido de números de identificação, você terá certeza que vai acessar o registro correspondente ao nome que você clicou:
// Método de objeto do array asNomes
Case of
:(Form event code=On Load)
ALL RECORDS([Pessoas])
SELECTION TO ARRAY([Pessoas]Nome;asNomes;[Pessoas]Numero ID;todosIDs)
SORT ARRAY(asNomes;todosIDs;>)
:(Form event code=On Unload)
CLEAR VARIABLE(asNomes)
CLEAR VARIABLE(todosiDs)
:(Form event code=On Clicked)
If(asNomes#0)
// Utilize o array todoslDs para obter o registro correto
QUERY([Pessoas];[Pessoas]Numero ID=todosIDs{asNomes})
// Fazer algo com o registro
End if
End case
// Método de objeto do botão bA2Z
// Ordenação dos arrays em ordem crescente conservando a sincronização
SORT ARRAY(asNomes;todosIDs;>)
// Método de objeto do botão bZ2A
// Ordenação dos arrays em ordem decrescente conservando a sincronização
SORT ARRAY(asNomes;todosIDs;<)
Ver também
Find in sorted array
MULTI SORT ARRAY
ORDER BY
SELECTION TO ARRAY