Clipper On Line • Ver Tópico - Ordenar Array com duas culunas Asort()

Ordenar Array com duas culunas Asort()

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Ordenar Array com duas culunas Asort()

Mensagempor clodoaldomonteiro » 12 Set 2016 18:09

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.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Ordenar Array com duas culunas Asort()

Mensagempor JoséQuintas » 12 Set 2016 18:48

Regra geral do ASort:

ASort( aArray, , , { | a, b | a > b } )


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....

Asort( aArray, , , { | a, b | a[ 1 ] > b[ 1 ] .OR. ( a [ 1 ] == b[ 1 ] .AND. a[ 2 ] < b[ 2 ] ) } )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar Array com duas culunas Asort() - RESOLVIDO

Mensagempor clodoaldomonteiro » 13 Set 2016 10:16

Meu amigo Quintas,

Muito obrigado pela pronta ajuda, ficou muito bom mesmo.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Ordenar Array com duas culunas Asort()

Mensagempor Euclides » 14 Set 2016 08:26

Olá pessoal!
Só para efeito de ilustração:
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
Euclides
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 154
Data de registro: 12 Mai 2007 14:07
Cidade/Estado: São Paulo, Capital
Curtiu: 1 vez
Mens.Curtidas: 14 vezes

Ordenar Array com duas culunas Asort()

Mensagempor JoséQuintas » 14 Set 2016 09:10

Concordo.
Fica instantâneo decifrar o que acontece.
Só acho desnecessário usar NIL, apesar de destacar a necessidade de dois elementos vazios.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar Array com duas culunas Asort()

Mensagempor clodoaldomonteiro » 15 Set 2016 13:46

Muito obrigado Euclides.
Valeu mesmo.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Ordenar Array com duas culunas Asort()

Mensagempor clodoaldomonteiro » 16 Jul 2018 15:38

Reabrindo o Tópico.

Precisei ordenar por 3 colunas e vejam como ficou:

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 ] )) } )
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Ordenar Array com duas culunas Asort()

Mensagempor JoséQuintas » 16 Jul 2018 20:06

Tenho a impressão de que a segunda análise está errada.

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 ] ) } )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Ordenar Array com duas culunas Asort()

Mensagempor JoséQuintas » 16 Jul 2018 20:19

É 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro