Página 1 de 1

Comando asort

Enviado: 22 Out 2004 10:19
por negrao
Pessoal, ve se tem jeito isso

no meu array tenho as seguintes informacoes
array[1,1] := 1
array[1,2] := 2
array[1,3] := space(5)

array[2,1] := 2
array[2,2] := 10
array[2,3] := "15 "

array[3,1] := 5
array[3,2] := 20
array[3,3] := "2 "

gostaria de ordenar pela 3 ordem, do menor para o maior e os espacos em branco ficando por ultimo.
O comando que estou usando é esse, mas nao ta trazendo o que quero
ARRAy := asort(ARRAy,,,{|x,y| x[03] < y[03] })

O resultado teria que ser esse
array[1,1] := 5
array[1,2] := 20
array[1,3] := "2 "

array[2,1] := 2
array[2,2] := 10
array[2,3] := "15 "

array[3,1] := 1
array[3,2] := 2
array[3,3] := space(5)

obrigado por qualquer ajuda

troca

Enviado: 22 Out 2004 10:47
por tonyx
ja pensou trocar spaces por zzzzz
trocar todos os spaces por ´zzzzzzz´
fazer o asort
trocar o zzzzzz por spaces

lembrando que o tamanho do array deve ser ate 2000 elementos

Re: Comando asort

Enviado: 22 Out 2004 15:52
por Maligno
negrao escreveu:gostaria de ordenar pela 3 ordem, do menor para o maior e os espacos em branco ficando por ultimo.
Para ordenar da forma que deseja, mantendo os elementos vazio embaixo, basta que você se lembre que a expressão de avaliação da ordenação pode ser um bloco com qualquer código. Uma vez que o caso do elemento vazio é uma excessão, você deverá apenas tratá-la de forma apropriada. Exemplo:

Código: Selecionar todos

ASort(aTST,,,{|x,y|if(Empty(x[3]) .or. Empty(y[3]), x[3]>y[3], x[3]<y[3]})
Assim, no caso de um dos elementos da comparação estar vazio, a ordem é invertida. No caso contrário a ordenação transcorre da maneira que você já conhece.

Isso é só um código exemplo, que pode servir de partida para ajudá-lo a resolver impasses desse tipo. Já precisei de ordenações bem mais mirabolantes que essa. O importante é entender o princípio aplicado. Depois disso você será capaz de resolver qualquer problema.

[]'s
Maligno
http://www.buzinello.com/prg