Intelligent sorting: A bit of a poser RESULTS CORRECTION
Bob Sneidar
bobs at twft.com
Fri Jul 2 12:01:08 EDT 2010
That would work until some idiot (like me) tried to sort a list containing asterisks.
Bob
On Jul 2, 2010, at 5:50 AM, Michael Kann wrote:
> Hugh, thanks for providing a fun and educational challenge -- and organizing the results. I woke up with an idea. Can you time my late entry?
> Thanks.
>
> Mike
>
> -------------------------------------
> -- I think the script is pretty
> -- self-explanatory
> -------------------------------------
>
>
> on mouseUp
> put fld 1 into v -- original data
> set the itemDel to "*"
>
> repeat with k = 0 to 9
> replace k with "*"&k in v
> end repeat
>
> repeat for each line k in v
> replace "*" with "" in item 2 to -1 of k
> put k & cr after h
> end repeat
> delete last char of h
>
> sort h numeric by item 2 of each
> sort h by item 1 of each
> replace "*" with "" in h
>
> put h into fld 2 -- output
> end mouseUp
>
> -------------------------------------
>
> --- On Fri, 7/2/10, FlexibleLearning <admin at FlexibleLearning.com> wrote:
>
>> From: FlexibleLearning <admin at FlexibleLearning.com>
>> Subject: Re: Intelligent sorting: A bit of a poser RESULTS CORRECTION
>> To: use-revolution at lists.runrev.com
>> Date: Friday, July 2, 2010, 1:19 AM
>> I made an inexcusable error when
>> applying the solutions in the benchtests.
>> When adjusting Mike's solution to handle commas in the list
>> I omitted to
>> adjust the itemDel. The corrected solution is below.
>>
>> As a result, Mike's solution is not only very fast, but
>> also sub-sorts the
>> alpha component and handles mixed suffix components (which
>> is very cool).
>> However, as pointed out, it cannot handle alpha-only list
>> items. Dave's
>> solution can handle lists with or without numbers, but the
>> sort order is
>> inexact.
>>
>> Using the insights of both solutions, I have based a
>> composite solution on
>> Mike's routine adjusted with the flexibility Dave's
>> routine. It has Mike's
>> speed and ability to sort mixed suffixes, but includes
>> Dave's ability to
>> sort mixed alpha-only and alphanumeric lists. I think this
>> provides the best
>> of everything for a generic library function...
>>
>> function sortMe5 pList
>> --| Hugh Senior <admin at FlexibleLearning.com>
>> --| Based on a solution by Mike Bonner <bonnmike at gmail.com>
>> set the itemDel to numtochar(8)
>> repeat for each line theLine in pList
>> if
>> matchchunk(theLine,"([a-zA-Z\s]\d)",theChar,theEnd) then
>> put numtochar(8) after char theChar of
>> theLine
>> else put numtochar(8) after theLine
>> put theLine & CR after tTemp
>> end repeat
>> delete last char of tTemp
>> sort lines of tTemp numeric by item 2 of each
>> sort lines of tTemp by item 1 of each
>> replace numtochar(8) with "" in tTemp
>> return tTemp
>> end sortMe5
>>
>> a 1
>> b20
>> a 20
>> a 2
>> b10
>> a 3
>> b3
>> a 1a
>> b2
>> a 10
>> b1a
>> d
>> c
>> b
>> a
>>
>> gives...
>>
>> a
>> a 1
>> a 1a
>> a 2
>> a 3
>> a 10
>> a 20
>> b
>> b1a
>> b2
>> b3
>> b10
>> b20
>> c
>> d
>>
>> Prior Work...
>>
>> function sortMe1 pVar
>> --| Mike Bonner <bonnmike at gmail.com>
>> set the itemDel to numtochar(8)
>> repeat for each line theLIne in PVar
>> get matchchunk(theLine,"([a-zA-Z\s]\d)" ,
>> theChar,theEnd )
>> put numtochar(8) after char theChar of
>> theLine
>> put theLine & return after tTemp
>> end repeat
>> delete the last char of tTemp
>> sort lines of tTemp ascending numeric by item 2 of
>> each
>> sort lines of tTemp ascending by item 1 of each
>> replace numtochar(8) with empty in tTemp
>> return tTemp
>> end sortMe1
>>
>> function sortMe2 tData
>> --| Dave Cragg <dave.cragg at lacscentre.co.uk>
>> set the itemDel to numtochar(8)
>> put "(^.*?)([0-9]*$)" into tRE
>> put "" into tData2
>> repeat for each line tLine in tData
>> get matchText(tLine, tRE, tS, tNum)
>> put tS & numtochar(8) & tNum & cr
>> after tData2
>> end repeat
>> sort lines of tData2 numeric by item -1 of each
>> sort lines of tData2 by item 1 of each
>> put "" into tData3
>> repeat for each line tLine in tData2
>> put item 1 to -2 of tLine & item -1 of
>> tLine & cr after tData3
>> end repeat
>> return tData3
>> end sortMe2
>>
>>
>> /H
>>
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage
>> your subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>
>
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list