Página 1 de 1
Ordenar Array com duas culunas Asort()
Enviado: 12 Set 2016 18:09
por clodoaldomonteiro
Olá amigos!
Tenho uma Array com várias colunas e queria saber se tem como eu ordenar com o Asort() a primeira coluna em ordem Decrescente e a segunda em ordem Crescente?
Desde já agradeço a atenção.
Ordenar Array com duas culunas Asort()
Enviado: 12 Set 2016 18:48
por JoséQuintas
Regra geral do ASort:
A e B são os elementos a comparar, e a expressão é o que usar pra comparar o maior/menor.
Não decorei se crescente/decrescente é .T. ou .F., mas so inverter > <, se precisar.
Então....
Código: Selecionar todos
Asort( aArray, , , { | a, b | a[ 1 ] > b[ 1 ] .OR. ( a [ 1 ] == b[ 1 ] .AND. a[ 2 ] < b[ 2 ] ) } )
Ordenar Array com duas culunas Asort() - RESOLVIDO
Enviado: 13 Set 2016 10:16
por clodoaldomonteiro
Meu amigo Quintas,
Muito obrigado pela pronta ajuda, ficou muito bom mesmo.
Ordenar Array com duas culunas Asort()
Enviado: 14 Set 2016 08:26
por Euclides
Olá pessoal!
Só para efeito de ilustração:
Código: Selecionar todos
ASort( aArray, nil, nil, { |x,y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], x[ 1 ] < y[ 1 ] ) } )
Eu acho esta mais "elegante"...
T+, Euclides
Ordenar Array com duas culunas Asort()
Enviado: 14 Set 2016 09:10
por JoséQuintas
Concordo.
Fica instantâneo decifrar o que acontece.
Só acho desnecessário usar NIL, apesar de destacar a necessidade de dois elementos vazios.
Ordenar Array com duas culunas Asort()
Enviado: 15 Set 2016 13:46
por clodoaldomonteiro
Muito obrigado Euclides.
Valeu mesmo.
Ordenar Array com duas culunas Asort()
Enviado: 16 Jul 2018 15:38
por clodoaldomonteiro
Reabrindo o Tópico.
Precisei ordenar por 3 colunas e vejam como ficou:
Código: Selecionar todos
ASort(aDespesa, , , { |x, y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], If( x[ 2 ] == y[ 2 ], x[ 3 ] < y[ 3 ], x[ 1 ] < y[ 1 ] )) } )
Ordenar Array com duas culunas Asort()
Enviado: 16 Jul 2018 20:06
por JoséQuintas
Tenho a impressão de que a segunda análise está errada.
Código: Selecionar todos
ASort( aDespesa, { | x, y | iif( x[ 1 ] == y[ 1 ], iif( x[ 2 ] == y[ 2 ], x[ 3 ] < y[ 3 ], x[ 2 ] < y[ 2 ] ), x[ 1 ] < y[ 1 ] ) } )
Ordenar Array com duas culunas Asort()
Enviado: 16 Jul 2018 20:19
por JoséQuintas
É isso mesmo.
Na anterior, se o primeiro for igual, apenas analisa o segundo e deixa o terceiro sem ordenar.
E se o primeiro for diferente, analisa se o segundo é igual pra decidir, e deixa o primeiro sem ordenar e talvez o terceiro também.
No que coloquei:
Se o primeiro e o segundo forem iguais, analisa o terceiro.
Se apenas o primeiro for igual, analisa o segundo.
Se o primeiro for diferente, analisa o primeiro.