Sort of a problem
Jim Hurley
jhurley0305 at sbcglobal.net
Thu May 10 23:46:19 EDT 2012
I have a list of streets:
Main St
Oak Ave
N Auburn
Kimberly Ct
S Rector Rd
Maple Ave
W Pine St
Fairmont Ave
I want to sort them, but ignoring the compass prefix (N E S W) to give:
N Auburn
Fairmont Ave
Kimberly Ct
Main St
Maple Ave
Oak Ave
W Pine St
S Rector Rd
The best I have come up with is performing a bubble sort where I have control of the first word.
That script is below. This works well enough for short lists, but not for longer lists.
It might be possible to speed it up with arrays, but that is not what I'm after right now.
I have seen some amazing things done with custom sorts in Live Code. I confess, I never understood them.
Is there a custom sort available in Live Code to do this kind of sort?
Thanks,
JIm Hurley
Here is the bubble sort:
on mouseUp
put field 1 into tList
put "N E S W" into tWordsToIgnore
put the number of lines in tList into n
repeat
put true into noChange
repeat with i = 1 to n-1
put theFirstWord(line i of tList, tWordsToIgnore) into tFirst
put theFirstWord(line i + 1 of tList, tWordsToIgnore) into tSecond
--Reverse sequencial pairs if out of order.
if tFirst > tSecond then
put line i of tList into temp
put line i + 1 of tList into line i of tList
put temp into line i + 1 of tList
put false into noChange
end if
end repeat
if the shiftKey is down then exit to top --Just in case
if noChange then exit repeat ---Keep it up until no change.
end repeat
put tList into field 2
end mouseUp
function theFirstWord temp, tIgnoreWords
put word 1 of temp into tFIrstWord
if tFirstWord is among the words of tIgnoreWords then
return word 2 of temp
else
return word 1 of temp
end if
end theFirstWord
More information about the use-livecode
mailing list