Page 1 of 1

aSort

Posted: Thu Jan 28, 2021 1:03 pm
by goosfancito
Hola. tengo esta matriz

Code: Select all

   ::aDatos := { ;
                 { "Raiz",    1,  1, 0, CToD( "01/02/2021" ) }, ;
                 { "uno",     1,  2, 1, CToD( "10/02/2021" ) }, ;
                 { "dos",     1,  3, 1, CToD( "05/02/2021" ) }, ;
                 { "tres",    1,  4, 1, CToD( "03/01/1821" ) }, ;
                 { "cuatro",  1,  5, 1, CToD( "01/01/1921" ) }, ;
                 { "cinco",   1,  6, 2, CToD( "05/01/1980" ) }, ;
                 { "seis",    1,  7, 3, CToD( "07/02/2020" ) }, ;
                 { "diez",    1,  8, 5, CToD( "02/05/1986" ) }, ;
                 { "trece",   1,  9, 8, CToD( "08/09/1972" ) }, ;
                 { "catorce", 1, 10, 9, CToD( "10/09/2019" ) }, ;
                 { "quince",  1, 11, 9, CToD( "02/08/1950" ) } ;
               }
y necesito con aSort (de poderse) ordenar por el 4to valor y a demas por la fecha, para que por ejemplo estas dos lineas queden ordenadas

Code: Select all

                 { "catorce", 1, 10, 9, CToD( "10/09/2019" ) }, ;
                 { "quince",  1, 11, 9, CToD( "02/08/1950" ) } ;
 
logro ordenarlo por uno de los datos pero no se ocmo hacerlo para que se haga por el de la fecha

Code: Select all

ASort( ::aDatos,,, { | x, y | x[ 4 ] < y[  4] } )
gracias.

Re: aSort

Posted: Thu Jan 28, 2021 1:53 pm
by TOTOVIOTTI
Goosfancito...

ASort( ::aDatos,,, { | x, y | x[ 4 ] < y[ 4] .and. x[ 5 ] < y[ 5] }


puedes cambiar como quieras lo que está dentro del codeblock.. usá la comparación que necesites, mayor, menor o igual...

o puedes hacer (ejemplo)

ASort( ::aDatos,,, { | x, y | x[ 4 ] < y[ 4] .and. x[ 5 ] > y[ 5] .and. x[ 1 ] < y[ 1]} (siempre considerá que "x" e "y" son los datos que compara de la misma matriz.

Re: aSort

Posted: Thu Jan 28, 2021 1:57 pm
by goosfancito
Gracias!

Re: aSort

Posted: Sat Jan 30, 2021 11:25 pm
by nageswaragunupudi

Code: Select all

ASort( ::aDatos, nil, nil, { |x,y| If( x[ 4 ] == y[ 4 ], x[ 5 ] < y[ 5 ], x[ 4 ] < y[ 4 ] ) } )

Re: aSort

Posted: Mon Feb 01, 2021 4:44 pm
by goosfancito
Rao.
Please can you sort this:

Code: Select all

  ::aDatos := { ;
                 { "Raiz",    1,  1, 0, CToD( "01/02/2021" ), 0 }, ;
                 { "cuatro",  1,  5, 1, CToD( "01/01/1921" ), 0 }, ;
                 { "uno",     1,  2, 1, CToD( "01/01/2020" ), 0 }, ;
                 { "dos",     1,  3, 1, CToD( "01/02/2021" ), 0 }, ;
                 { "tres",    1,  4, 8, CToD( "03/01/2022" ), 0 }, ;
                 { "cinco",   1,  6, 9, CToD( "05/01/1980" ), 0 }, ;
                 { "seis",    1,  7, 2, CToD( "07/02/2020" ), 0 }, ;
                 { "diez",    1,  8, 5, CToD( "02/05/1986" ), 0 }, ;
                 { "trece",   1,  9, 8, CToD( "08/09/1972" ), 0 }, ;
                 { "catorce", 1, 10, 9, CToD( "10/09/2019" ), 0 }, ;
                 { "quince",  1, 11, 10, CToD( "12/10/2050" ), 0 }, ;
                 { "i_idea",  1, 12, 11, CToD( "12/10/2050" ), 0 } ;
               }
because
{ "cuatro", 1, 5, 1, CToD( "01/01/1921" ), 0 }, ;
{ "uno", 1, 2, 1, CToD( "01/01/2020" ), 0 }, ;
{ "dos", 1, 3, 1, CToD( "01/02/2021" ), 0 }, ;
{ "tres", 1, 4, 8, CToD( "03/01/2022" ), 0 }, ;
not sort to me.

::adatos[ 2][ 1] (C6) => "cuatro"
::adatos[ 2][ 2] (N) => 7302136
::adatos[ 2][ 3] (N) => 5
::adatos[ 2][ 4] (N) => 1
::adatos[ 2][ 5] (D) => 01/01/21 <<<<<<<<<<<<<<<<<<<<<<
::adatos[ 2][ 6] (N) => 2

::adatos[ 3][ 1] (C3) => "uno"
::adatos[ 3][ 2] (N) => 7302280
::adatos[ 3][ 3] (N) => 2
::adatos[ 3][ 4] (N) => 1
::adatos[ 3][ 5] (D) => 01/01/20
::adatos[ 3][ 6] (N) => 3

::adatos[ 4][ 1] (C3) => "dos"
::adatos[ 4][ 2] (N) => 7301488
::adatos[ 4][ 3] (N) => 3
::adatos[ 4][ 4] (N) => 1
::adatos[ 4][ 5] (D) => 01/02/21 <<<<<<<<<<
[/quote]

Re: aSort

Posted: Mon Feb 01, 2021 4:53 pm
by nageswaragunupudi
Please explain in what order you want to sort?

Re: aSort

Posted: Mon Feb 01, 2021 5:40 pm
by JESUS MARIN
perdón por la intromisión.

Tu dato :

::adatos[ 2][ 5] (D) => 01/01/21 <<<<<<<<<<<<<<<<<<<<<<

¿ese 21 corresponde a 1921?

Re: aSort

Posted: Mon Feb 01, 2021 6:42 pm
by goosfancito
asi es

Re: aSort

Posted: Mon Feb 01, 2021 7:28 pm
by JESUS MARIN
Entonces, dónde está el problema ?

no lo encuentro ......

debo estar obcecado hoy.

Re: aSort

Posted: Mon Feb 01, 2021 7:35 pm
by goosfancito
hay tres fechas,
la fecha de medio deberia de no estar ahi.
esta mal ordenado.

Re: aSort

Posted: Tue Feb 02, 2021 8:51 am
by JESUS MARIN
Veamos.
Según dices, esto no es correcto ?

::adatos[ 2][ 5] (D) => 01/01/21
...
::adatos[ 3][ 5] (D) => 01/01/20
...
::adatos[ 4][ 5] (D) => 01/02/21

pero ....

=> 01/01/21 = 01/01/1921
=> 01/01/20 = 01/01/2020
=> 01/02/21 = 01/02/2021

no ?

y por tanto si sería correcto