How to doubble sort a collection

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
18 messages Options
Reply | Threaded
Open this post in threaded view
|

How to doubble sort a collection

Raymond Asselin-4
I have this kind of sorting on anOrderedCollection

BlocNotes >>sortedNotes
        ^notes sorted:[:a :b | a date  > b date]

This sort my notes on date but I want them sort by date AND inside a date by hours and I don't khow how to do this.

Some insights?

aNote = 'med com date temps' instancesVariables what I call hours = temps witch is a number like 2123 for 21h23

Some insights?_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

How to doubble sort a collection

Louis LaBrunda
Hi Raymond,

Try:

^notes sorted:[:a :b | (a date  > b date) | ((a date = b date) & (a date
temps > b date temps))].

Lou

On Wed, 04 Feb 2015 10:34:48 -0500, Raymond Asselin <[hidden email]>
wrote:

>I have this kind of sorting on anOrderedCollection
>
>BlocNotes >>sortedNotes
> ^notes sorted:[:a :b | a date  > b date]
>
>This sort my notes on date but I want them sort by date AND inside a date by hours and I don't khow how to do this.
>
>Some insights?
>
>aNote = 'med com date temps' instancesVariables what I call hours = temps witch is a number like 2123 for 21h23
>
>Some insights?
-----------------------------------------------------------
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon
mailto:[hidden email] http://www.Keystone-Software.com

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Paul DeBruicker
Does using the | or & notation have any advantages over and: or or:  or ifTrue:ifFalse ?


I always write expressions like the one you've written like:

a date = b date
   ifTrue:[a temps > b temps]
   ifFalse:[a date > b date]






Louis LaBrunda wrote
Hi Raymond,

Try:

^notes sorted:[:a :b | (a date  > b date) | ((a date = b date) & (a date
temps > b date temps))].

Lou

On Wed, 04 Feb 2015 10:34:48 -0500, Raymond Asselin <[hidden email]>
wrote:

>I have this kind of sorting on anOrderedCollection
>
>BlocNotes >>sortedNotes
> ^notes sorted:[:a :b | a date  > b date]
>
>This sort my notes on date but I want them sort by date AND inside a date by hours and I don't khow how to do this.
>
>Some insights?
>
>aNote = 'med com date temps' instancesVariables what I call hours = temps witch is a number like 2123 for 21h23
>
>Some insights?
-----------------------------------------------------------
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon
mailto:[hidden email] http://www.Keystone-Software.com

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
cbc
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

cbc
| and & make sure that each expression between them is executed - so it will do each of:
   a date  > b date
and 
   a date = b date
and
   a date > temps > b date temps

This matters if one of these is significantly slower than the others - it will run it even it it doesn't need too.  Also if any side-effects are in one of these expressions, this will make that side effect happen (there aren't any in these, though).

and: and or: stop executing as soon as one of them is satisfied sufficiently - so if a date > b date then it will immediately return true without bothering with the rest of the expressions.
ifTrue:ifFalse: is similar - except you will evaluate the condition expression AND one of the following expressions.

Often this doesn't matter one way or another - but when it does, it matters a lot.

-cbc

On Wed, Feb 4, 2015 at 9:00 AM, Paul DeBruicker <[hidden email]> wrote:
Does using the | or & notation have any advantages over and: or or:  or
ifTrue:ifFalse ?


I always write expressions like the one you've written like:

a date = b date
   ifTrue:[a temps > b temps]
   ifFalse:[a date > b date]







Louis LaBrunda wrote
> Hi Raymond,
>
> Try:
>
> ^notes sorted:[:a :b | (a date  > b date) | ((a date = b date) & (a date
> temps > b date temps))].
>
> Lou
>
> On Wed, 04 Feb 2015 10:34:48 -0500, Raymond Asselin &lt;

> jgr.asselin@

> &gt;
> wrote:
>
>>I have this kind of sorting on anOrderedCollection
>>
>>BlocNotes >>sortedNotes
>>      ^notes sorted:[:a :b | a date  > b date]
>>
>>This sort my notes on date but I want them sort by date AND inside a date
by hours and I don't khow how to do this.
>>
>>Some insights?
>>
>>aNote = 'med com date temps' instancesVariables what I call hours = temps
witch is a number like 2123 for 21h23
>>
>>Some insights?
> -----------------------------------------------------------
> Louis LaBrunda
> Keystone Software Corp.
> SkypeMe callto://PhotonDemon
> mailto:

> Lou@

http://www.Keystone-Software.com
>
> _______________________________________________
> Beginners mailing list

> Beginners@.squeakfoundation

> http://lists.squeakfoundation.org/mailman/listinfo/beginners





--
View this message in context: http://forum.world.st/How-to-doubble-sort-a-collection-tp4803657p4803671.html
Sent from the Squeak - Beginners mailing list archive at Nabble.com.
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

How to doubble sort a collection - DynamicSortBlock.st (1/1)

Louis LaBrunda
In reply to this post by Paul DeBruicker

begin 644 DynamicSortBlock.st
M#0I/8FIE8W0@<W5B8VQA<W,Z("-$>6YA;6EC4V]R=$)L;V-K#0H@("`@8VQA
M<W-);G-T86YC959A<FEA8FQE3F%M97,Z("<G#0H@("`@:6YS=&%N8V5687)I
M86)L94YA;65S.B`G86-C97-S;W)S(&1I<F5C=&EO;G,@)PT*("`@(&-L87-S
M5F%R:6%B;&5.86UE<SH@)R<-"B`@("!P;V]L1&EC=&EO;F%R:65S.B`G)R$-
M"@T*(41Y;F%M:6-3;W)T0FQO8VL@8VQA<W,@<'5B;&EC365T:&]D<R`A#0H-
M"F%C8V5S<V]R<SH@86Y/<F1E<F5D0V]L;&5C=&EO;@T*"2)#<F5A=&4@82!N
M97<@:6YS=&%N8V4@86YD('-E="!A8V-E<W-O<G,N(@T*#0H)7BAS96QF(&YE
M=RD@86-C97-S;W)S.B!A;D]R9&5R961#;VQL96-T:6]N.R!Y;W5R<V5L9BX-
M"B$-"@T*86-C97-S;W)S.B!A;D]R9&5R961#;VQL96-T:6]N(&1I<F5C=&EO
M;G,Z(&%N3W)D97)E9$-O;&QE8W1I;VXR#0H)(D-R96%T92!A(&YE=R!I;G-T
M86YC92!A;F0@<V5T(&%C8V5S<V]R<R!A;F0@9&ER96-T:6]N<RXB#0H-"@E>
M*'-E;&8@;F5W*2!A8V-E<W-O<G,Z(&%N3W)D97)E9$-O;&QE8W1I;VX@9&ER
M96-T:6]N<SH@86Y/<F1E<F5D0V]L;&5C=&EO;C([('EO=7)S96QF+@T*(0T*
M#0IS;W)T0W)I=&5R:6$Z(&%N3W)D97)E9$-O;&QE8W1I;VX-"@DB0W)E871E
M(&$@;F5W(&EN<W1A;F-E(&%N9"!S970@86-C97-S;W)S(&%N9"!D:7)E8W1I
M;VYS(&9R;VT@=&AE(&]R9&5R960@8V]L;&5C=&EO;B!O9B!A<W-O8VEA=&EO
M;G,-"@D)=VAE<F4@=&AE(&ME>2!I<R!A;B!A8V-E<W-O<B!A;F0@=&AE('9A
M;'5E(&ES(&$@8F]O;&5A;B!D:7)E8W1I;VXN(@T*#0H)7BAS96QF(&YE=RD@
M<V]R=$-R:71E<FEA.B!A;D]R9&5R961#;VQL96-T:6]N.R!Y;W5R<V5L9BX-
M"B$@(0T*#0HA1'EN86UI8U-O<G1";&]C:R!P=6)L:6--971H;V1S("$-"@T*
M86-C97-S;W)S#0H)(D%N<W=E<B!A8V-E<W-O<G,N("!!;B!O<F1E<F5D(&-O
M;&QE8W1I;VX@;V8@;65T:&]D(&YA;65S("A3>6UB;VQS*2!U<V5D(&9O<B!S
M;W)T:6YG(&-O;7!L97@@8VQA<W-E<RXB#0H)(E-E92`C=F%L=64Z=F%L=64Z
M(@T*#0H)86-C97-S;W)S(&ES3FEL(&EF5')U93H@6V%C8V5S<V]R<R`Z/2!/
M<F1E<F5D0V]L;&5C=&EO;B!N97==+@T*"5YA8V-E<W-O<G,N#0HA#0H-"F%C
M8V5S<V]R<SH@86Y/<F1E<F5D0V]L;&5C=&EO;@T*"2)3970@86-C97-S;W)S
M+B`@06X@;W)D97)E9"!C;VQL96-T:6]N(&]F(&UE=&AO9"!N86UE<R`H4WEM
M8F]L<RD@=7-E9"!F;W(@<V]R=&EN9R!C;VUP;&5X(&-L87-S97,N(@T*"2)3
M964@(W9A;'5E.G9A;'5E.B(-"@T*"6%C8V5S<V]R<R`Z/2!A;D]R9&5R961#
M;VQL96-T:6]N(&%S3W)D97)E9$-O;&QE8W1I;VXN#0HA#0H-"F%C8V5S<V]R
M<SH@86Y/<F1E<F5D0V]L;&5C=&EO;B!D:7)E8W1I;VYS.B!A;D]R9&5R961#
M;VQL96-T:6]N,@T*"2)3970@86-C97-S;W)S+B`@06X@;W)D97)E9"!C;VQL
M96-T:6]N(&]F(&UE=&AO9"!N86UE<R`H4WEM8F]L<RD@=7-E9"!F;W(@<V]R
M=&EN9R!C;VUP;&5X(&-L87-S97,N(@T*"2)3970@9&ER96-T:6]N<RX@($%N
M(&]R9&5R960@8V]L;&5C=&EO;B!O9B!B;V]L96%N<R!U<V5D(&9O<B!S;W)T
M:6YG(&-O;7!L97@@8VQA<W-E<RXB#0H)(D]N92!F;W(@96%C:"!S>6UB;VP@
M:6X@86-C97-S;W)S+"!T<G5E(&UE86YS(&%S8V5N9&EN9RP@9F%L<V4@;65A
M;G,@9&5S8V5N9&EN9RXB#0H)(E-E92`C=F%L=64Z=F%L=64Z(@T*#0H)<V5L
M9B!A8V-E<W-O<G,Z(&%N3W)D97)E9$-O;&QE8W1I;VXN#0H)<V5L9B!D:7)E
M8W1I;VYS.B!A;D]R9&5R961#;VQL96-T:6]N,BX-"B$-"@T*861D.B!A;D%S
M<V]C:6%T:6]N3W)3>6UB;VP-"@DB268@86X@87-S;V-I871I;VXL(&%D9"!T
M:&4@86-C97-S;W(@86YD(&1I<F5C=&EO;B!F<F]M('1H92!A<W-O8VEA=&EO
M;BP-"@D)96QS92!A9&0@=&AE('-Y;6)O;"!A;F0@87-C96YD:6YG(&1I<F5C
M=&EO;BXB#0H-"@EA;D%S<V]C:6%T:6]N3W)3>6UB;VP@:7-3>6UB;VP@:694
M<G5E.B!;#0H)"7-E;&8@86-C97-S;W)S(&%D9#H@86Y!<W-O8VEA=&EO;D]R
M4WEM8F]L+@T*"0ES96QF(&1I<F5C=&EO;G,@861D.B!T<G5E+@T*"5T@:69&
M86QS93H@6PT*"0ES96QF(&%C8V5S<V]R<R!A9&0Z(&%N07-S;V-I871I;VY/
M<E-Y;6)O;"!K97DN#0H)"7-E;&8@861D1&ER96-T:6]N.B!A;D%S<V]C:6%T
M:6]N3W)3>6UB;VP@=F%L=64N#0H)72X-"B$-"@T*861D06-C97-S;W(Z(&%3
M>6UB;VP@86YD1&ER96-T:6]N.B!A0F]O;&5A;D]R4W1R:6YG#0H)(D%D9"!T
M:&4@86-C97-S;W(@86YD(&ET<R!D:7)E8W1I;VXN(@T*#0H)<V5L9B!A8V-E
M<W-O<G,@861D.B!A4WEM8F]L+@T*"7-E;&8@861D1&ER96-T:6]N.B!A0F]O
M;&5A;D]R4W1R:6YG+@T*(0T*#0IA9&1!<V,Z(&%3>6UB;VP-"@DB061D('1H
M92!A8V-E<W-O<B!A;F0@86X@87-C96YD:6YG(&1I<F5C=&EO;BXB#0H-"@ES
M96QF(&%C8V5S<V]R<R!A9&0Z(&%3>6UB;VPN#0H)<V5L9B!D:7)E8W1I;VYS
M(&%D9#H@=')U92X-"B$-"@T*861D1&5S8SH@85-Y;6)O;`T*"2)!9&0@=&AE
M(&%C8V5S<V]R(&%N9"!A(&1E<V-E;F1I;F<@9&ER96-T:6]N+B(-"@T*"7-E
M;&8@86-C97-S;W)S(&%D9#H@85-Y;6)O;"X-"@ES96QF(&1I<F5C=&EO;G,@
M861D.B!F86QS92X-"B$-"@T*861D1&ER96-T:6]N.B!B;V]L96%N3W)3=')I
M;F<-"@DB061D(&$@9&ER96-T:6]N('1O('1H92!O<F1E<F5D(&-O;&QE8W1I
M;VX@;V8@8F]O;&5A;G,@=7-E9"!F;W(@<V]R=&EN9R!C;VUP;&5X(&-L87-S
M97,N(@T*"2)3964@(W9A;'5E.G9A;'5E.B(-"@T*"2)!;&QO=R!F;W(@=')U
M92P@9F%L<V4L("-A<V-E;F1I;F<L("-D97-C96YD:6YG+"`G87-C96YD:6YG
M)RP@)V1E<V-E;F1I;F<G(&]R("-G87)B86=E+@T*"41I<F5C=&EO;B!D969A
M=6QT<R!T;R!A<V-E;F1I;F<L('-O(&EF(&)O;VQE86Y/<E-T<FEN9R!I<R!A
M;GET:&EN9R!O=&AE<B!T:&%N('1R=64L(&9A;'-E(&]R(&$@<W1R:6YG#0H)
M<W1A<G1I;F<@=VET:"!A("=D)R!O<B`G1"<L(&%S8V5N9&EN9R!I<R!A<W-U
M;65D+B(-"@T*"7-E;&8@9&ER96-T:6]N<R!A9&0Z("@H8F]O;&5A;D]R4W1R
M:6YG(#T](&9A;'-E*2!O<CH@6V)O;VQE86Y/<E-T<FEN9R!I<U-T<FEN9R!A
M;F0Z(%LG9"HG(&UA=&-H.B!B;V]L96%N3W)3=')I;F==72D@;F]T+@T*(0T*
M#0ID:7)E8W1I;VYS#0H)(D%N<W=E<B!D:7)E8W1I;VYS+B`@06X@;W)D97)E
M9"!C;VQL96-T:6]N(&]F(&)O;VQE86YS('5S960@9F]R('-O<G1I;F<@8V]M
M<&QE>"!C;&%S<V5S+B(-"@DB3VYE(&9O<B!E86-H('-Y;6)O;"!I;B!A8V-E
M<W-O<G,L('1R=64@;65A;G,@87-C96YD:6YG+"!F86QS92!M96%N<R!D97-C
M96YD:6YG+B(-"@DB4V5E("-V86QU93IV86QU93HB#0H-"@ED:7)E8W1I;VYS
M(&ES3FEL(&EF5')U93H@6V1I<F5C=&EO;G,@.CT@3W)D97)E9$-O;&QE8W1I
M;VX@;F5W72X-"@E>9&ER96-T:6]N<RX-"B$-"@T*9&ER96-T:6]N<SH@86Y/
M<F1E<F5D0V]L;&5C=&EO;@T*"2)3970@9&ER96-T:6]N<RX@($%N(&]R9&5R
M960@8V]L;&5C=&EO;B!O9B!B;V]L96%N<R!U<V5D(&9O<B!S;W)T:6YG(&-O
M;7!L97@@8VQA<W-E<RXB#0H)(D]N92!F;W(@96%C:"!S>6UB;VP@:6X@86-C
M97-S;W)S+"!T<G5E(&UE86YS(&%S8V5N9&EN9RP@9F%L<V4@;65A;G,@9&5S
M8V5N9&EN9RXB#0H)(E-E92`C=F%L=64Z=F%L=64Z(@T*#0H)(D%L;&]W(&9O
M<B`C*'1R=64@9F%L<V4@(V%S8V5N9&EN9R`C9&5S8V5N9&EN9R`G87-C96YD
M:6YG)R`G9&5S8V5N9&EN9R<@(V=A<F)A9V4I('1H870@=VEL;"!R97-U;'0@
M:6XZ#0H)86X@3W)D97)E9$-O;&QE8W1I;VXH=')U92!F86QS92!T<G5E(&9A
M;'-E('1R=64@9F%L<V4@=')U92DN("!$:7)E8W1I;VX@9&5F875L=',@=&\@
M87-C96YD:6YG+"!S;R!I9B!V86QU97,@87)E(&%N>71H:6YG#0H);W1H97(@
M=&AA;B!T<G5E+"!F86QS92!O<B!A('-T<FEN9R!S=&%R=&EN9R!W:71H(&$@
M)V0G(&]R("=$)RP@87-C96YD:6YG(&ES(&%S<W5M960N(@T*#0H)9&ER96-T
M:6]N<R`Z/2!A;D]R9&5R961#;VQL96-T:6]N(&%S3W)D97)E9$-O;&QE8W1I
M;VX@8V]L;&5C=#H@6SIB;V]L96%N3W)3=')I;F<@?`T*"0DH*&)O;VQE86Y/
M<E-T<FEN9R`]/2!F86QS92D@;W(Z(%MB;V]L96%N3W)3=')I;F<@:7-3=')I
M;F<@86YD.B!;)V0J)R!M871C:#H@8F]O;&5A;D]R4W1R:6YG75TI(&YO=%TN
M#0HA#0H-"G!A:7)E9$1I<F5C=&EO;G,-"@DB06YS=V5R(&1I<F5C=&EO;G,L
M(&%N(&]R9&5R960@8V]L;&5C=&EO;B!O9B!B;V]L96%N<R!F:6QL960@=&\@
M;6%T8V@@=&AE('-I>F4@;V8@86-C97-S;W)S+B(-"@DB4V5E("-D:7)E8W1I
M;VYS(&%N9"`C=F%L=64Z=F%L=64Z(@T*"7P@<&%I<F5D1&ER96-T:6]N<R!A
M9&1#;G0@?`T*#0H)<&%I<F5D1&ER96-T:6]N<R`Z/2!S96QF(&1I<F5C=&EO
M;G,@8V]P>2X-"@EA9&1#;G0@.CT@<V5L9B!A8V-E<W-O<G,@<VEZ92`M('!A
M:7)E9$1I<F5C=&EO;G,@<VEZ92X-"@EA9&1#;G0@=&EM97-297!E870Z(%MP
M86ER961$:7)E8W1I;VYS(&%D9#H@=')U95TN#0H)7G!A:7)E9$1I<F5C=&EO
M;G,N#0HA#0H-"G!R:6YT3VXZ(&%3=')E86T-"@DB4')I;G0@=&AE(&%C8V5S
M<V]R<R!A;F0@9&ER96-T:6]N<R!O;B!T:&4@<W1R96%M+B(-"@T*"6%3=')E
M86T@;F5X=%!U=$%L;#H@)T$@1'EN86UI8R!3;W)T($)L;V-K)SL@8W(N#0H)
M<V5L9B!A8V-E<W-O<G,@=VET:#H@<V5L9B!P86ER961$:7)E8W1I;VYS(&1O
M.B!;.F%C8V5S<V]R(#ID:7)E8W1I;VX@?"!\(&1I<F5C=&EO;E-T<FEN9R!\
M#0H)"61I<F5C=&EO;E-T<FEN9R`Z/2!D:7)E8W1I;VX@:694<G5E.B!;)T%S
M8V5N9&EN9R==(&EF1F%L<V4Z(%LG1&5S8V5N9&EN9R==+@T*"0EA4W1R96%M
M('1A8CL@;F5X=%!U=#H@)",[(&YE>'10=71!;&PZ(&%C8V5S<V]R.R!N97AT
M4'5T06QL.B`G("T@)SL@;F5X=%!U=$%L;#H@9&ER96-T:6]N4W1R:6YG.R!C
M<ETN#0HA#0H-"G-O<G1#<FET97)I80T*"2)!;G-W97(@=&AE(&%C8V5S<V]R
M<R!A;F0@9&ER96-T:6]N<R!I;B!T:&4@9F]R;2!O9B!A;B!O<F1E<F5D(&-O
M;&QE8W1I;VX@;V8@87-S;V-I871I;VYS#0H)"7=H97)E('1H92!K97D@:7,@
M86X@86-C97-S;W(@86YD('1H92!V86QU92!I<R!A(&)O;VQE86X@9&ER96-T
M:6]N+B(-"@E\('-O<G1#<FET97)I82!\#0H-"@ES;W)T0W)I=&5R:6$@.CT@
M3W)D97)E9$-O;&QE8W1I;VX@;F5W+@T*"7-E;&8@86-C97-S;W)S('=I=&@Z
M('-E;&8@<&%I<F5D1&ER96-T:6]N<R!D;SH@6SIA8V-E<W-O<B`Z9&ER96-T
M:6]N('P@<V]R=$-R:71E<FEA(&%D9#H@*$%S<V]C:6%T:6]N(&ME>3H@86-C
M97-S;W(@=F%L=64Z(&1I<F5C=&EO;BE=+@T*"5YS;W)T0W)I=&5R:6$N#0HA
M#0H-"G-O<G1#<FET97)I83H@86Y/<F1E<F5D0V]L;&5C=&EO;@T*"2)3970@
M86-C97-S;W)S(&%N9"!D:7)E8W1I;VX@9G)O;2!T:&4@;W)D97)E9"!C;VQL
M96-T:6]N(&]F(&%S<V]C:6%T:6]N<R!W:&5R92!T:&4@:V5Y(&ES(&%N(&%C
M8V5S<V]R#0H)"6%N9"!T:&4@=F%L=64@:7,@82!B;V]L96%N(&1I<F5C=&EO
M;BXB#0H-"@EA;D]R9&5R961#;VQL96-T:6]N(&1O.B!;.G-O<G1#<FET97)I
M82!\('-E;&8@861D06-C97-S;W(Z('-O<G1#<FET97)I82!K97D@86YD1&ER
M96-T:6]N.B!S;W)T0W)I=&5R:6$@=F%L=65=+@T*(0T*#0IV86QU93H@:71E
M;4$@=F%L=64Z(&ET96U"#0H)(D-O;7!A<F4@=&AE('1W;R!I=&5M<R!B87-E
M9"!U<&]N('1H92!A8V-E<W-O<G,@86YD(&1I<F5C=&EO;G,N(@T*"2)%<G)O
M<G,@86-C97-S:6YG('9A;'5E<R!B>2!T:&4@86-C97-S;W)S(&%R92!T<F%P
M<&5D(&%N9"!A;B!A='1E;7!T(&ES(&UA9&4@=&\@9V5T(&$@=F%L=64@=FEA
M("-A=#HN(@T*"2)4:&ES(&ES('1O(&%C8V]M;6]D871E('-O<G1I;F<@9&%T
M86)A<V4@<F]W<R!A;F0@;W1H97(@<F5C;W)D<R!T:&%T(')E<W!O;F0@=&\@
M(V%T.BXB#0H)(E-U8G-E<75E;G0@97)R;W)S(&%R92!N;W0@=')A<'!E9"XB
M#0H)(DYO=&4Z(&YI;"!V86QU97,@87)E('1R96%T960@87,@;&5S<R!T:&%N
M('1H96ER(&-O<G)E<W!O;F1I;F<@=F%L=64N(@T*"7P@<&%I<F5D1&ER96-T
M:6]N<R!\#0H-"@EP86ER961$:7)E8W1I;VYS(#H]('-E;&8@<&%I<F5D1&ER
M96-T:6]N<RX-"@T*"7-E;&8@86-C97-S;W)S('=I=&@Z('!A:7)E9$1I<F5C
M=&EO;G,@9&\Z(%LZ86-C97-S;W(@.F1I<F5C=&EO;B!\('P@=F%L=65!('9A
M;'5E0B!\#0H)"79A;'5E02`Z/2!;:71E;4$@<&5R9F]R;3H@86-C97-S;W)=
M('=H96XZ($5X17)R;W(@9&\Z(%LZ<VEG;F%L('P@<VEG;F%L(&5X:717:71H
M.B`H:71E;4$@870Z(&%C8V5S<V]R*5TN#0H)"79A;'5E0B`Z/2!;:71E;4(@
M<&5R9F]R;3H@86-C97-S;W)=('=H96XZ($5X17)R;W(@9&\Z(%LZ<VEG;F%L
M('P@<VEG;F%L(&5X:717:71H.B`H:71E;4(@870Z(&%C8V5S<V]R*5TN#0H)
M"2AV86QU94$@/2!V86QU94(I(&EF1F%L<V4Z(%L-"@D)"79A;'5E02!I<TYI
M;"!I9E1R=64Z(%M>9&ER96-T:6]N72X-"@D)"79A;'5E0B!I<TYI;"!I9E1R
M=64Z(%M>9&ER96-T:6]N(&YO=%TN#0H)"0DH=F%L=65!(#P@=F%L=65"*2!I
M9E1R=64Z(%M>9&ER96-T:6]N72X-"@D)"2AV86QU94$@/B!V86QU94(I(&EF
M5')U93H@6UYD:7)E8W1I;VX@;F]T72X-"@D)72X-"@E=+@T*"5YT<G5E+@T*
L(2`A#0H-"D1Y;F%M:6-3;W)T0FQO8VL@:6YI=&EA;&EZ94%F=&5R3&]A9"$*
`
end

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

How to doubble sort a collection - DynamicSortBlock.st (0/1)

Louis LaBrunda
In reply to this post by Paul DeBruicker
On Wed, 4 Feb 2015 09:00:13 -0800 (PST), Paul DeBruicker
<[hidden email]> wrote:

>Does using the | or & notation have any advantages over and: or or:  or
>ifTrue:ifFalse ?

and: and or: are needed when you don't want to execute the code inside the
block unless it is needed.  They are also used to protect from executing
code that shouldn't be run for example:

x notNil and: [x foo > y foo]

>I always write expressions like the one you've written like:

>a date = b date
>   ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]

I like this but it may be a little tricky for a beginner.  But both or
replay help one to learn.

I have also attached a file out (from VA Smalltalk) of a class that acts
like a sort block but is much easier to use for complex sorts.

Lou

>Louis LaBrunda wrote
>> Hi Raymond,
>>
>> Try:
>>
>> ^notes sorted:[:a :b | (a date  > b date) | ((a date = b date) & (a date
>> temps > b date temps))].
>>
>> Lou
>>
>> On Wed, 04 Feb 2015 10:34:48 -0500, Raymond Asselin &lt;
>
>> jgr.asselin@
>
>> &gt;
>> wrote:
>>
>>>I have this kind of sorting on anOrderedCollection
>>>
>>>BlocNotes >>sortedNotes
>>> ^notes sorted:[:a :b | a date  > b date]
>>>
>>>This sort my notes on date but I want them sort by date AND inside a date
>by hours and I don't khow how to do this.
>>>
>>>Some insights?
>>>
>>>aNote = 'med com date temps' instancesVariables what I call hours = temps
>witch is a number like 2123 for 21h23
>>>
>>>Some insights?
>> -----------------------------------------------------------
>> Louis LaBrunda
>> Keystone Software Corp.
>> SkypeMe callto://PhotonDemon
>> mailto:
>
>> Lou@
>
>>  http://www.Keystone-Software.com
>>
>> _______________________________________________
>> Beginners mailing list
>
>> Beginners@.squeakfoundation
>
>> http://lists.squeakfoundation.org/mailman/listinfo/beginners
-----------------------------------------------------------
Louis LaBrunda
Keystone Software Corp.
SkypeMe callto://PhotonDemon
mailto:[hidden email] http://www.Keystone-Software.com

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Raymond Asselin-4
In reply to this post by Paul DeBruicker
For now I implemented:

sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .

AND

notesSorted
^notes sort:[:a :b | a date = b date
  ifTrue:[a temps > b temps]
  ifFalse:[a date > b date]] .

does exactly the same result.

But there is still notes in a same date that do not sort correctly, the begining is good and after 5 or so objects
I get some witch do not seem to be sorted.

BTW don't know the difference between sort:  and sorted:
it seems as if the last one produce a new collection and the first one produce same collection but sorted.

Note: I use 24 hours instead of a.m. / p.m. is this may cause problems?

> Le 2015-02-04 à 12:00, Paul DeBruicker <[hidden email]> a écrit :
>
> a date = b date
>   ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Tobias Pape

On 04.02.2015, at 19:22, Raymond Asselin <[hidden email]> wrote:

> For now I implemented:
>
> sortedNotes
> ^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .
>
> AND
>
> notesSorted
> ^notes sort:[:a :b | a date = b date
> ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]] .
>
> does exactly the same result.

sounds strange.
Probably you don't want to store date and time separated but as
DateAndTime instances, then you just have to sort them by that.
Look at that class.
  Also, you can see that Date is a subclass of Timespan,
which implies a duration: a Date is a timespan of one day. You
probably don't want that if you compare them like above.


>
> But there is still notes in a same date that do not sort correctly, the begining is good and after 5 or so objects
> I get some witch do not seem to be sorted.

can you give an example?

>
> BTW don't know the difference between sort:  and sorted:
> it seems as if the last one produce a new collection and the first one produce same collection but sorted.
>

exactly.
#sorted: is like saying
        “Give me this, but sorted” and this “give me” typically results in a new collection.
#sort: is like saying
        “You! Sort yourself!” and implies mutation
        (a bit like set! in scheme or sort! in ruby)


> Note: I use 24 hours instead of a.m. / p.m. is this may cause problems?

see above


BEst
        -Tobias_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Paul DeBruicker
In reply to this post by Raymond Asselin-4
Proably because you're using #> and not #>=.  If not that post the list of dates/times that don't sort properly.



also - #sort: & #sort sort in place.  #sorted & sorted: make a new copy as you've seen.  If your objects should always sort the same way just implement #<= in the instance side of your object and then you can use #sort or #sorted without having to add a sort block.







Raymond Asselin-4 wrote
For now I implemented:

sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .

AND

notesSorted
^notes sort:[:a :b | a date = b date
  ifTrue:[a temps > b temps]
  ifFalse:[a date > b date]] .

does exactly the same result.

But there is still notes in a same date that do not sort correctly, the begining is good and after 5 or so objects
I get some witch do not seem to be sorted.

BTW don't know the difference between sort:  and sorted:
it seems as if the last one produce a new collection and the first one produce same collection but sorted.

Note: I use 24 hours instead of a.m. / p.m. is this may cause problems?

> Le 2015-02-04 à 12:00, Paul DeBruicker <[hidden email]> a écrit :
>
> a date = b date
>   ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Raymond Asselin-4
In reply to this post by Tobias Pape



Le 2015-02-04 à 13:33, Tobias Pape <[hidden email]> a écrit :


can you give an example?



_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
cbc
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

cbc
In reply to this post by Raymond Asselin-4
You have a logic issue with the first one:
sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .
This is saying that the the two dates are different, then false.  For this you probably want to be something like:
sortedNotes
^notes sort:[:a :b | a date > b date or: [(a date = b date) and:[a temps > b temps]]] .

-cbc

On Wed, Feb 4, 2015 at 10:22 AM, Raymond Asselin <[hidden email]> wrote:
For now I implemented:

sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .

AND

notesSorted
^notes sort:[:a :b | a date = b date
                ifTrue:[a temps > b temps]
                ifFalse:[a date > b date]] .

does exactly the same result.

But there is still notes in a same date that do not sort correctly, the begining is good and after 5 or so objects
I get some witch do not seem to be sorted.

BTW don't know the difference between sort:  and sorted:
it seems as if the last one produce a new collection and the first one produce same collection but sorted.

Note: I use 24 hours instead of a.m. / p.m. is this may cause problems?

> Le 2015-02-04 à 12:00, Paul DeBruicker <[hidden email]> a écrit :
>
> a date = b date
>   ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Paul DeBruicker
In reply to this post by Raymond Asselin-4
Are your temps stored as strings? Strings that are numbers aren't coerced to numbers before comparison.  

e.g. in a workspace



'765' > '1230'  

prints true and  


765 > 1230


prints false.....







Raymond Asselin-4 wrote
> Le 2015-02-04 à 13:33, Tobias Pape <[hidden email]> a écrit :
>
>
> can you give an example?
>


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners


SortedNotesExample.png (62K) <http://forum.world.st/attachment/4803715/0/SortedNotesExample.png>
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Raymond Asselin-4
In reply to this post by cbc
I finaly found the problem witch was not in the code suggest but behind the keyboard.

In fact when the time is generated everything is good , when i entered it by hand = this is a String.
So I had in the sorting code:  
^notes sort:[:a :b | (a date = b date) and:[a temps asTime > b temps asTime ]] .




Le 2015-02-04 à 14:40, Chris Cunningham <[hidden email]> a écrit :

You have a logic issue with the first one:
sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .
This is saying that the the two dates are different, then false.  For this you probably want to be something like:
sortedNotes
^notes sort:[:a :b | a date > b date or: [(a date = b date) and:[a temps > b temps]]] .

-cbc

On Wed, Feb 4, 2015 at 10:22 AM, Raymond Asselin <[hidden email]> wrote:
For now I implemented:

sortedNotes
^notes sort:[:a :b | (a date = b date) and:[a temps > b temps]] .

AND

notesSorted
^notes sort:[:a :b | a date = b date
                ifTrue:[a temps > b temps]
                ifFalse:[a date > b date]] .

does exactly the same result.

But there is still notes in a same date that do not sort correctly, the begining is good and after 5 or so objects
I get some witch do not seem to be sorted.

BTW don't know the difference between sort:  and sorted:
it seems as if the last one produce a new collection and the first one produce same collection but sorted.

Note: I use 24 hours instead of a.m. / p.m. is this may cause problems?

> Le 2015-02-04 à 12:00, Paul DeBruicker <[hidden email]> a écrit :
>
> a date = b date
>   ifTrue:[a temps > b temps]
>   ifFalse:[a date > b date]

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Raymond Asselin-4
Thank to everybody because I learned a lot here
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Nicolas Cellier
Raymond Asselin <jgr.asselin <at> me.com> writes:

>
> Thank to everybody because I learned a lot here
>


If you're in a recent Squeak, then you can also write:

^notes sorted: #date descending , #temps descending

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Chris Muller-3
In reply to this post by Raymond Asselin-4
Hi Raymond,

On Wed, Feb 4, 2015 at 12:42 PM, Raymond Asselin <[hidden email]> wrote:




Whoa!  That looks familiar!  :)

With Maui, you normallly don't need to do methods like #sortedNotes.  You can just have #notes in there like you do at the bottom (set its output resultView to #panel).  Then if you simply implement these methods on your Note class:

    mauiDefaultColumns
        ^ #(med date heures com)

and

    mauiSortableColumns
       ^ #(med date heures comString)

and

    comString
        ^ self com ifNil: [ String empty ]

Then, hover your mouse inside the yellowish area of the collection, press ESC to invoke the menu, then select "generate heading".

You will get proper headers for those columns with ascending / descending sort arrows for each column.  All for free from Maui.

HTH.


_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Raymond Asselin-4
I Got it. 
You talked about generate heading in the past but can't figure how to send it. 
Now it's clear "<<hover your mouse inside the yellowish area of the collection, press ESC to invoke the menu, then select "generate heading">>.

Envoyé de mon iPhone

Le 2015-02-16 à 16:36, Chris Muller <[hidden email]> a écrit :

Hi Raymond,

On Wed, Feb 4, 2015 at 12:42 PM, Raymond Asselin <[hidden email]> wrote:
<SortedNotesExample.png>



Whoa!  That looks familiar!  :)

With Maui, you normallly don't need to do methods like #sortedNotes.  You can just have #notes in there like you do at the bottom (set its output resultView to #panel).  Then if you simply implement these methods on your Note class:

    mauiDefaultColumns
        ^ #(med date heures com)

and

    mauiSortableColumns
       ^ #(med date heures comString)

and

    comString
        ^ self com ifNil: [ String empty ]

Then, hover your mouse inside the yellowish area of the collection, press ESC to invoke the menu, then select "generate heading".

You will get proper headers for those columns with ascending / descending sort arrows for each column.  All for free from Maui.

HTH.

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners

_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners
Reply | Threaded
Open this post in threaded view
|

Re: How to doubble sort a collection

Chris Muller-3
On Mon, Feb 16, 2015 at 5:21 PM, Raymond Asselin <[hidden email]> wrote:
> I Got it.
> You talked about generate heading in the past but can't figure how to send
> it.
> Now it's clear "<<hover your mouse inside the yellowish area of the
> collection, press ESC to invoke the menu, then select "generate heading">>.

Ah, sorry I did not make that more clear!  Yes, that is the
collection-object itself is represented on the screen, with its own
context menu.

And, you can actually do a poor-mans multi-level sorting by selecting
the ascending / descending arrows in \reverse\ order (inner-most sort
level to outer-most).


> Envoyé de mon iPhone
>
> Le 2015-02-16 à 16:36, Chris Muller <[hidden email]> a écrit :
>
> Hi Raymond,
>
> On Wed, Feb 4, 2015 at 12:42 PM, Raymond Asselin <[hidden email]> wrote:
>>
>> <SortedNotesExample.png>
>>
>>
>
> Whoa!  That looks familiar!  :)
>
> With Maui, you normallly don't need to do methods like #sortedNotes.  You
> can just have #notes in there like you do at the bottom (set its output
> resultView to #panel).  Then if you simply implement these methods on your
> Note class:
>
>     mauiDefaultColumns
>         ^ #(med date heures com)
>
> and
>
>     mauiSortableColumns
>        ^ #(med date heures comString)
>
> and
>
>     comString
>         ^ self com ifNil: [ String empty ]
>
> Then, hover your mouse inside the yellowish area of the collection, press
> ESC to invoke the menu, then select "generate heading".
>
> You will get proper headers for those columns with ascending / descending
> sort arrows for each column.  All for free from Maui.
>
> HTH.
>
> _______________________________________________
> Beginners mailing list
> [hidden email]
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
>
> _______________________________________________
> Beginners mailing list
> [hidden email]
> http://lists.squeakfoundation.org/mailman/listinfo/beginners
>
_______________________________________________
Beginners mailing list
[hidden email]
http://lists.squeakfoundation.org/mailman/listinfo/beginners