Efficiency question for list modification
FlexibleLearning
admin at FlexibleLearning.com
Fri Mar 11 06:24:04 EST 2011
Proof of how optimized syntax can make an enormous difference to speed (by
orders of magnitude in this case).
This is BAD...
repeat for each line L in tData
add 1 to n
put (item 1 of L/div1) into item 1 of line n of stdout
put (item 2 of L/div2) into item 2 of line n of stdout
end repeat
This is GOOD...
repeat for each line L in tData
put (item 1 of L/div1) &","& (item 2 of L/div2) &CR after stdout
end repeat
The Rule is: Less is More. Obvious with hindsight. Should have optimized
before asking.
Note to self: Do not expect to function on 4 hours of sleep.
Thanks to all who investigated and contributed. Wrists considered slapped.
Hugh Senior
FLCo
--- Original was:
Problem:
I have a long list of several thousand lines.
Each line contains two comma-separated numbers.
I want to divide the first item of each line by one divisor, and divide the
second item of each line by a different divisor.
The list order must stay the same.
Example:
Using 2 and 5 as divisors...
10,10
12,15
8,12
would become
5,2
6,3
4,2.4
Options:
1. Using "repeat with n=1 to num of lines" takes far too long.
2. Using "repeat for each line L" either attempts to modify read-only data,
or
is only 25% faster using a dumping variable.
3. Using split/combine will mess up the ordering (numeric array keys are not
sorted numerically with combine).
Any other ideas?
Hugh Senior
FLCo
More information about the use-livecode
mailing list