Reverse a list

Peter M. Brigham pmbrig at gmail.com
Sun Feb 15 15:55:16 CET 2015


My mistake. You are correct that the two are equally efficient. It was an error in my timing test handler.

-- Peter

Peter M. Brigham
pmbrig at gmail.com
http://home.comcast.net/~pmbrig

On Feb 15, 2015, at 7:56 AM, Dave Cragg wrote:

> Peter,
> 
> I don’t follow. If I change the repeat portion of your code to use repeat n times as below, the speed doesn’t change. And the speed scales linearly in both cases if the size of the data set is increased.
> 
> put the keys of pList into indexList
> put the number of lines of indexList into i
> put i into numTimes
>  repeat numTimes times
>     -- tLine is never used, but "repeat for each" is faster than "repeat <n> times"
>     --    and this iterates the correct number of times
>     put pList[i] & pDelim after outList
>     subtract 1 from i
>  end repeat
> 
> The advantage of "repeat for each" is when iterating over chunks in a string. (repeat for each line/item/word) In this case, we’re iterating over array elements, and so there is no advantage. If you look back at my earlier version which iterated through array elements from last to first, you’ll see it is basically doing the same as your reverseSort, and the times are also the same.
> 
> Cheers
> Dave
> 
> 
>> On 15 Feb 2015, at 04:31, Peter M. Brigham <pmbrig at gmail.com> wrote:
>> 
>> Harking back to the original discussion on reversing a list -- still the subject of this thread, here's the original example as I saved it in my library.
>> 
>> function reverseSort pList, pDelim
>>  -- reverse sorts an arbitrary list
>>  --    ie, item/line -1 -> item/line 1, item/line -2 -> item/line 2, etc.
>>  -- pDelim defaults to cr
>>  -- from an exchange on the use-LC list
>>  --    this was the fastest pure LC method of several proposed
>>  if pDelim = empty then put cr into pDelim
>>  split pList by pDelim
>>  put the keys of pList into indexList
>>  put the number of lines of indexList into i
>>  repeat for each line tLine in indexList
>>     -- tLine is never used, but "repeat for each" is faster than "repeat <n> times"
>>     --    and this iterates the correct number of times
>>     put pList[i] & pDelim after outList
>>     subtract 1 from i
>>  end repeat
>>  delete char -1 of outList
>>  return outList
>> end reverseSort
>> 
>> Note that the repeat is a "repeat for each line tLine…" even though the value of tLine is never actually used within the repeat loop. It's incredibly fast to do it that way, and it's an easy way to repeat something a foreseeable number of times. Using a "repeat n times" is glacial by comparison. I do agree that the dictionary should not just say the "repeat for each" form is much faster, it should say the "repeat for each" form is MUCH, MUCH faster.
>> 
>> -- Peter
>> 
>> Peter M. Brigham
>> pmbrig at gmail.com
>> http://home.comcast.net/~pmbrig
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode




More information about the use-livecode mailing list