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